[英]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:1
, request.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.