harugonos
@harugonos

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Djangoにおけるurl設定について

解決したいこと

以下に示すコードの通りfunc_1では,HTMLの入力フォームから受け取った値を取得し,とある条件と一致した値のみlistへ格納する処理を行います.

そこで,listが存在する場合はtemplate_2.htmlへ遷移しlistの情報を用いた表示を行い,listが空の場合はtemplate_1.htmlへ遷移するようにしています.
このとき,template_1.html表示時のurlは'~/func_1/', template_2.html表示時のurlは'~/func_2/'となるようにしたいです.

該当するソースコード

views.py
def func_1(request):
    '''
    requestから受け取った値xを取得
    '''

    list = []

    '''
    とある条件と一致する値をlistに格納
    '''

    if list:
        return render(request, 'appMain/template_2.html', {'list': list})
    else:
        return render(request, 'appMain/template_1.html', {})
urls.py
app_name = 'appMain'
urlpatterns = [
    # 省略
    path('func_1/', views.func_1, name='name_1')
]

自分で試したこと

上記の記述で実行したところ,template_1.html表示時のurlは'~/func_1/'となるものの,template_2.html表示時も'~/func_1/'となってしまいます.
template_2.html表示時では'~/func_2/'とするためにはどのように上記を書き換える必要があるでしょうか.

0

2Answer

template_2.html表示時では'~/func_2/'とする

httpは

GET /func_1 HTTP/1.1
リクエストヘッダー
空行

送られ、path('func_1/', views.func_1
にてif list:が判定され、真偽関係なく

HTTP/1.1 200 OK
レスポンスヘッダー
空行
ボディー

がブラウザへ返されます。/func_1や/func_2を指定する箇所がありません。

さて、今思いつくのは2つくらいです。

  1. path('func_2/'を定義し、func_1のtrue判定時にfunc_2へ301リダイレクトする。
  2. javascriptにて、location.urlにfunc_2をセットする前に、遷移しないようにする。

1Like

Comments

  1. @harugonos

    Questioner

    ご回答いただきありがとうございます.
    javascriptを使用してアドレスバーを書き換える方法で思い通りの動作をしました.
    お助けいただきありがとうございました.

Djangoに詳しくないため、外していたらごめんなさい。

urls.pypath('func_2/', views.func_1, name='name_2')の追加と、
template_2.html<a href="{% url 'name_2' %}">を追加する。
どうでしょうか?

0Like

Your answer might help someone💌