假如在 urls.py 中有一个视图函数: path("/index", view.index, name="index")
在 Django 模板那边可以用 {% url "index" %} 把这个 url (/path/index )生成。
我想问一下,假设我想生成的 url 附加 GIT 请求参数,例如: /path/index?foo=bar, 那我 Django 模板那边的 url 该怎么写?
1
iiduce 2018-11-16 08:09:01 +08:00
这个是最基本的,看一下官方文档。
|
2
chengxiao 2018-11-16 08:11:28 +08:00
{% url "index" %}/?foo=bar ,不过记得官方并不推荐这种写法 ,"/path/index/foo/bar/",一般是这样写
|
3
hzwjz 2018-11-16 08:15:15 +08:00 via Android
不用生成的,想获取 foo 的值,可以这样子 request.Get.get('foo')。
|
7
rockdodos 2018-11-16 08:30:14 +08:00
url.py:path("/index/<str:foo>", view.index, name="index")
templates:{% url "index" bar %} |
8
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 还那么理直气壮的怼回复的人 |
11
hellojay 2018-11-16 08:58:55 +08:00
文档没有就去看源代码。
|
12
tzhhahaha 2018-11-16 09:23:31 +08:00
http://www.liujiangblog.com/course/django/
给楼主提供一个链接。。。 |
13
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 做一些逻辑判断和处理。 |
15
ltoddy OP |
17
xpresslink 2018-11-16 10:59:03 +08:00
楼主这个问题简直无离头啊?
在模板里直接这么写不就行了么? <a href=" {% url "index" %}?foo=bar"> |
18
ltoddy OP @xpresslink 你不觉得很 ugly 吗。
|
19
xpresslink 2018-11-16 11:01:29 +08:00
补充一下,这样生成的 url 是 /path/index/?foo=bar 要多一个 /
但是工作是正常的。 |
20
ltoddy OP @xpresslink ok,我下午试试
|
21
xpresslink 2018-11-16 11:04:53 +08:00
|
22
lixuda 2020-12-24 16:16:29 +08:00 1
也遇到这个问题,flask url 是可以直接拼接 get 参数,django 找了 1 圈,没有发现,好像只能自己拼接。楼主不知道有没有找到比较优雅方式
|
25
lixuda 2020-12-28 16:40:55 +08:00
@ltoddy
``` from django import template from urllib.parse import urlencode register = template.Library() @register.simple_tag def urlparams(*_, **kwargs): safe_args = {k: v for k, v in kwargs.items() if v is not None} if safe_args: return '?{}'.format(urlencode(safe_args)) return '' index.html {% load urlparams %} <a href="{% url 'videos:index'}{% urlparams page='1' tag='sometag' %}">Next</a> ``` 是类似这样吗 |