未从 url 读取 Django 可选参数

Posted

技术标签:

【中文标题】未从 url 读取 Django 可选参数【英文标题】:Django optional parameter is not readed from url 【发布时间】:2018-03-05 01:41:47 【问题描述】:

我正在阅读线程Django optional url parameters 并按照步骤生成带有单个可选参数的 URL。

嗯,我的网址应该是:

/client/
/client/?clientname=John

我已经定义了两个 urlpatterns

url(r'^$', views.index, name='index'),
url(r'^/(?P<clientname>\d+)/',views.index),

好吧,此时它们都渲染了页面。 但是,在我看来:

def index(request, clientname='noparameter'):
    print("The searched name is: " + str(clientname))

搜索到的名字总是noparameter

我做错了吗?

【问题讨论】:

【参考方案1】:

你的网址是

/client/John/ 

而不是

/client/?clientname=John

即使在以下示例中使用 John 也会失败,因为您的正则表达式用于数字,请查看更多关于 django dispatcher 的主题

  /client/4/ 

如果您想获取 GET 参数,则可以使用以下方法在视图中执行此操作

request.GET.get('clientanme', None)

【讨论】:

【参考方案2】:

您似乎对关键字参数和获取请求感到困惑。使用为 urls.py 配置的关键字参数,您的视图将如下所示:

def index(request, **kwargs):
    clientname = kwargs.get("clientname", "noparameter")
    print("The searched name is: " + str(clientname))

您的 urls.py 还必须更改为 this 的 url:

url(r'^client/(?P<clientname>\w+)/',views.index),

这可以在浏览器中调用,如:

/client/John

【讨论】:

你说得对!读完标题***.com/questions/3500859/django-request-get#3500932我更清楚你写给我的内容。谢谢!

以上是关于未从 url 读取 Django 可选参数的主要内容,如果未能解决你的问题,请参考以下文章

包含几个可选参数/参数的 django url

Django 2+ 中的多个可选 URL 参数

django url 正则表达式匹配可选参数

如何在 Django 中定义可选的查询参数?

Django的路由设置

Django框架之路由