簡體   English   中英

django如何將參數從url傳遞到視圖

[英]django how to pass parameter from url to view

我正在嘗試在問題網址的末尾附加參數no_rep作為顯示不同視圖的信號。 我正在使用Django 1.8,並遵循Askbot的url模式。

這是url.py

url(
        (r'^%s(?P<id>\d+)/' % QUESTION_PAGE_BASE_URL.strip('/') +
        r'(%s)?' % r'/no-rep:(?P<no_rep>\w+)'),
        views.readers.question,
        name='question'
    ),

我試圖根據URL中no_rep的值顯示不同的顯示。

這是視圖

def question(request, id, no_rep):
    if no_rep == '1':
        request.session['no_rep'] = True
    else:
        request.session['no_rep'] = False

我找不到有關+,%、?的信息。 這樣做,這可能是問題所在。 有人可以解釋正則表達式如何與基本網址一起使用嗎? 當我輸入網址http://localhost:8000/question6/test-question/no_rep:1request.session['no_rep']應該設置為true,但事實並非如此。 我想念什么?

在所有替換(%)之后,您的網址看起來像這樣: r'^question(?P<id>\\d+)/(/no-rep:(?P<no_rep>\\w+))?' ,因此:
1.缺少test-question
2.您在命名組no_rep周圍有奇怪的分組(這是合法的,但不建議使用

因此,對於像http://localhost:8000/question6/test-question/no_rep:1的網址,您的網址格式應如下所示:
r'^%s(?P<id>\\d+)/test-question/(?:no_rep:(?P<no_rep>\\d+))?' % QUESTION_PAGE_BASE_URL.strip('/') r'^%s(?P<id>\\d+)/test-question/(?:no_rep:(?P<no_rep>\\d+))?' % QUESTION_PAGE_BASE_URL.strip('/') (如果您也希望字母匹配,則可以在\\ w +的最后一組更改\\ d +)。

關於非捕獲組(?:...)以及+和?的含義 您可以閱讀Python re模塊的文檔

將您的網址格式更改為類似的內容,

urlpatterns = [
                  url(r'question/(?P<id>\d+)/no-rep/(?P<no_rep>\w+)/', question),

              ]

要么

QUESTION_PAGE_BASE_URL = "question"
urlpatterns = [
                  url(r'{QUESTION_PAGE_BASE_URL}/(?P<id>\d+)/no-rep/(?P<no_rep>\w+)/'.format(
                      QUESTION_PAGE_BASE_URL=QUESTION_PAGE_BASE_URL), question),

              ] + router.urls



注意 :
named groups id類的named groups與一些字符串或char之類的URL一起使用不是好主意( localhost:8000/question6/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM