質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.21%

Django urls.pyにおいて、%E4%BD%A0%E5%A5%BDや%E8%B0%A2%E8%B0%A2に一致する正規表現を書きたい

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 803

hdahrn

score 36

python3.5とdjango1.9.7を用いて、Webサイトを製作しようと試みている初心者です。

現在、文字列を含むURLをどのようにurls.pyにおいて振り分ければ良いのかわからず困っています。
目的と致しましては、簡易的な用語辞典みたいなものを想定しております。

それぞれの用語ごとにページ(html)を作り、dictionary以下に配置したいと考えております。
それぞれのページのファイル名は%E4%BD%A0%E5%A5%BD.htmlや%E8%B0%A2%E8%B0%A2.htmlという名前で、これらは用語の名前を変換したものになっています。用語自体は数百あります。

%E4%BD%A0%E5%A5%BD.html 文字列上では你好.html
%E8%B0%A2%E8%B0%A2.html 文字列上では谢谢.html

from django.conf.urls import include, url
from . import views

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^dictionary/ここにどう書けばよろしいのでしょうか?/$', views.dictionary, name='dictionary'),
]

質問内容がわかりにくいかもしれませんが、ご教授お願いできればなと思います。
どうかよろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

一応

/^(%[A-F0-9][A-F0-9])+$/


でマッチできますが,htmlを出力するのであれば,間接的に/searchなどを指定して,search.pyなどのファイルに/search?params=%E4%BD%A0%E5%A5%BDなどクエリパラメータ付きリクエストを送って,search.pyのなかで、パラメータに対応したhtmlをresponseとして返すというような設計の方が一般的なように思います。
もし質問者さまの提示されている設計を採用する絶対の理由がない場合は,ご紹介した設計に変更されることをお勧めします。

追記

djangoのドキュメントのこの項目で説明されているようにrenderというメソッドをpythonコードから呼び出すと,urlで呼ばれたpythonコードからユーザーに返すhtmlファイルを自由に変更することができます。

次にurlというのはページを呼び出すurl文字列の後に?という文字列をつけると,それ以降の文字列をサーバに送信することができます(ただし,この文字列を送る時は,(データ名=データの値)という決まりがあります。)。その文字列をサーバ側で受け入れるようにプログラミングを行なっていれば,その送られたデータを元にユーザーへの処理を変更することができます。

例えば,/searchというurlで呼ばれた時にsearch.pyが呼ばれる仕組みになっていたとして,/search?params=%E4%BD%A0%E5%A5%BDとすると,request.META['QUERY_STRING']["params"]という変数に你好,という文字列が入るのでこれをrenderに渡せば実現できます。(例ではviewにこの値をいれたとします),render(~, view + '.html',~)。

Amazonは,urlマッチ方式でプログラミングをしていますね。これを参考にしたいのであれば,この記事公式ドキュメントのようにdjangoでは,(?P<username>\w{0,50})というように,?P<変数名>正規表現で,正規表現の条件を満たすurlに埋め込まれた文字列を変数で受け取れるので,これを同様にrenderにいれたりif文で条件分岐させてあげれば上手くいきます。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/09/07 01:11

    ご教授ありがとうございます。
    「クエリパラメータ付きリクエストを送って,search.pyのなかで、パラメータに対応したhtmlをresponseとして返すというような設計の方が一般的」???
    ごめんなさい。私の理解がおいつかないので、どうするのが良いのかよくわかってませんが、search.pyの中でパラメータに対応したhtmlをresponseとして返す設計を書く場合はどのようにしたらよいのでしょうか?

    忙しい中大変申し訳ございません。もしよろしければ、ご教授お願い申し上げます。

    キャンセル

  • 2016/09/10 06:21

    tkowさんへ
    とても丁寧な説明ありがとうございました。
    参考サイトを参照しながら、一つ一つかみ砕いて目的の結果を得られるように頑張りたいと思います。
    本当にこの度はご教授ありがとうございました。深く感謝いたします。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.21%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る