我在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中? 我错过了什么? 提前谢谢。
答案 0 :(得分:4)
池不是get参数的一部分,它从url中提取并作为变量pool
传递给视图。这就是为什么print pool
适用于您的观点。
如果你的网址是
/licenses/?pool=ansys
然后,网址/licences/
将匹配您的网址格式中的正则表达式r'^licenses/$'
,而pool
将位于获取参数中。
答案 1 :(得分:2)
实际上,后面的URL参数是?将被提取并放入GET中。您可以从视图函数的参数中获取池。