Django参数不在querydict中但在视图中

时间:2015-10-06 10:26:39

标签: django python-2.7

我在Django 1.8.3中遇到了一些奇怪的行为。 (注意:我用1.7.4开始了这个项目) 我想重用一个视图以防它获得get-request,所以我在urls.py中定义了以下url,它位于我的settings.py所在的同一个地方。

(注意:这是短版本)

urlpatterns = patterns('',
    url(r'^licenses/$', views.licenses),
    url(r'^licenses/(?P<pool>.*)/$', views.licenses, name='pool'),
)

在我的views.py中定义了以下视图:

def licenses(request, pool=None):
    print request, request.GET
    print pool

调用视图的模板(base.html):

<li><a href="/licenses/">Licenses</a>
    <ul>
        {% for pool in LICENSE_MENU %}
            <li class="dir"><a href="/licenses/{{ pool }}">{{ pool }}</a></li>
        {% endfor %}
    </ul> 
</li>

LICENSE_MENU是context_processor传递给base.html的许可证列表

一切都很好。如果我点击许可证,我会被重定向到许可证()但我点击的许可证不会显示在请求中。 运行测试服务器并单击链接时,我的shell输出如下:

[06/Oct/2015 12:16:03]"GET / HTTP/1.1" 200 129165
<WSGIRequest: GET '/licenses/'> <QueryDict: {}>
[06/Oct/2015 12:16:06]"GET /licenses/ HTTP/1.1" 200 128597
<WSGIRequest: GET '/licenses/ansys/'> <QueryDict: {}>
ansys
[06/Oct/2015 12:16:11]"GET /licenses/ansys/ HTTP/1.1" 200 128851

为什么我的视图打印池虽然它不在请求querydict中? 我错过了什么? 提前谢谢。

2 个答案:

答案 0 :(得分:4)

池不是get参数的一部分,它从url中提取并作为变量pool传递给视图。这就是为什么print pool适用于您的观点。

如果你的网址是

/licenses/?pool=ansys

然后,网址/licences/将匹配您的网址格式中的正则表达式r'^licenses/$',而pool将位于获取参数中。

答案 1 :(得分:2)

实际上,后面的URL参数是?将被提取并放入GET中。您可以从视图函数的参数中获取池。