Django 模板 url 如何构造请求参数

2018-11-16 07:27:10 +08:00
 ltoddy

假如在 urls.py 中有一个视图函数: path("/index", view.index, name="index")

在 Django 模板那边可以用 {% url "index" %} 把这个 url (/path/index )生成。

我想问一下,假设我想生成的 url 附加 GIT 请求参数,例如: /path/index?foo=bar, 那我 Django 模板那边的 url 该怎么写?

5175 次点击
所在节点    Python
26 条回复
iiduce
2018-11-16 08:09:01 +08:00
这个是最基本的,看一下官方文档。
chengxiao
2018-11-16 08:11:28 +08:00
{% url "index" %}/?foo=bar ,不过记得官方并不推荐这种写法 ,"/path/index/foo/bar/",一般是这样写
hzwjz
2018-11-16 08:15:15 +08:00
不用生成的,想获取 foo 的值,可以这样子 request.Get.get('foo')。
ltoddy
2018-11-16 08:18:05 +08:00
@iiduce 文档里要是有,我还问这个问题干嘛.
ltoddy
2018-11-16 08:18:41 +08:00
@hzwjz 你看清楚我问的呀, 我问的是 django 模板那边怎么构造请求参数, 不是视图函数那边怎么取到请求参数.
ltoddy
2018-11-16 08:19:14 +08:00
@chengxiao 对,我现在就是用这个方案解决的, 这个方案太 ugly 了.
rockdodos
2018-11-16 08:30:14 +08:00
url.py:path("/index/<str:foo>", view.index, name="index")
templates:{% url "index" bar %}
wonderay
2018-11-16 08:32:55 +08:00
{% url 'some-url-name' arg1=v1 arg2=v2 %}

官方文档里没有么???还是你根本不看
https://docs.djangoproject.com/en/2.1/ref/templates/builtins/#url

google 一下也很快会得到答案
https://stackoverflow.com/questions/25345392/how-to-add-url-parameters-to-django-template-url-tag
还那么理直气壮的怼回复的人
ltoddy
2018-11-16 08:48:41 +08:00
@wonderay 我试过了,不行的,模板那边报错的。
ltoddy
2018-11-16 08:54:43 +08:00
@wonderay 我要的是 url 的请求参数,又不是动态路由的参数。
hellojay
2018-11-16 08:58:55 +08:00
文档没有就去看源代码。
tzhhahaha
2018-11-16 09:23:31 +08:00
http://www.liujiangblog.com/course/django/
给楼主提供一个链接。。。
iiduce
2018-11-16 09:25:15 +08:00
你怼一下,我又看了一遍问题,结合下面你的回复,才理解你的意思。恕我愚钝,抱歉了。

我现在理解是,你想在模板中生成一个 url,这个 url 附带当前页面的 get 动态参数。

1、urls.py 文件中应该不能直接实现。

2、#3 的方法可以。能用就好,优雅其次。

3、我平时用的方法,在当前页面的 view 中 request.get 参数,放到模板变量{get_param}中,在模板里{% url "index" %}/?foo={get_param}。相比之下,优雅些?好处在于,方便在 view 中对 get 到的 param 做一些逻辑判断和处理。
ltoddy
2018-11-16 10:12:50 +08:00
@tzhhahaha 竟然学框架有看教程而不是文档的?......
ltoddy
2018-11-16 10:13:56 +08:00
@iiduce 我这个是 django 版本是 2.1.3(最新的), 我在考虑把 urls.py 中用 path 注册的视图函数换成 re_path 然后在 url 通过参数方式传递. (尝试).
iiduce
2018-11-16 10:16:53 +08:00
@ltoddy 我对 django 的认知还停留在 1.* 版本
xpresslink
2018-11-16 10:59:03 +08:00
楼主这个问题简直无离头啊?
在模板里直接这么写不就行了么?
<a href=" {% url "index" %}?foo=bar">
ltoddy
2018-11-16 11:01:29 +08:00
@xpresslink 你不觉得很 ugly 吗。
xpresslink
2018-11-16 11:01:29 +08:00
补充一下,这样生成的 url 是 /path/index/?foo=bar 要多一个 /
但是工作是正常的。
ltoddy
2018-11-16 11:01:58 +08:00
@xpresslink ok,我下午试试

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/508351

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX