繁体   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