【问题标题】:Django parameter not in querydict but in viewDjango 参数不在查询字典中,但在视图中
【发布时间】:2016-01-03 05:35:51
【问题描述】:

我在 Django 1.8.3 中遇到了一些奇怪的行为。 (注:我从 1.7.4 开始项目) 我想重用视图以防它收到获取请求,因此我在位于我的 settings.py 所在位置的 urls.py 中定义了以下 url。

(注意:这是短版)

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 的许可证列表

一切正常。如果我点击一个许可证,我会被重定向到 licenses() 但我点击的许可证不会出现在请求中。 当我运行测试服务器并单击链接时,我的 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

为什么我的视图打印池虽然不在请求查询字典中? 我错过了什么? 提前致谢。

【问题讨论】:

    标签: django python-2.7


    【解决方案1】:

    池不是获取参数的一部分,它是从 url 中提取的,并作为变量 pool 传递给视图。这就是为什么print pool 在您的视图中起作用的原因。

    如果你的网址是

    /licenses/?pool=ansys
    

    那么 url /licences/ 将与您的 url 模式中的正则表达式 r'^licenses/$' 匹配,pool 将在 get 参数中。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-14
        • 1970-01-01
        • 2020-07-06
        • 2023-04-01
        • 1970-01-01
        • 2021-08-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多