[英]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.