假如在 urls.py 中有一个视图函数: path("/index", view.index, name="index")
在 Django 模板那边可以用 {% url "index" %} 把这个 url (/path/index )生成。
我想问一下,假设我想生成的 url 附加 GIT 请求参数,例如: /path/index?foo=bar, 那我 Django 模板那边的 url 该怎么写?
1
iiduce Nov 16, 2018
这个是最基本的,看一下官方文档。
|
2
chengxiao Nov 16, 2018
{% url "index" %}/?foo=bar ,不过记得官方并不推荐这种写法 ,"/path/index/foo/bar/",一般是这样写
|
3
hzwjz Nov 16, 2018 via Android
不用生成的,想获取 foo 的值,可以这样子 request.Get.get('foo')。
|
7
rockdodos Nov 16, 2018
url.py:path("/index/<str:foo>", view.index, name="index")
templates:{% url "index" bar %} |
8
wonderay Nov 16, 2018
{% 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 Nov 16, 2018
文档没有就去看源代码。
|
12
tzhhahaha Nov 16, 2018
http://www.liujiangblog.com/course/django/
给楼主提供一个链接。。。 |
13
iiduce Nov 16, 2018
你怼一下,我又看了一遍问题,结合下面你的回复,才理解你的意思。恕我愚钝,抱歉了。
我现在理解是,你想在模板中生成一个 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 Nov 16, 2018
楼主这个问题简直无离头啊?
在模板里直接这么写不就行了么? <a href=" {% url "index" %}?foo=bar"> |
18
ltoddy OP @xpresslink 你不觉得很 ugly 吗。
|
19
xpresslink Nov 16, 2018
补充一下,这样生成的 url 是 /path/index/?foo=bar 要多一个 /
但是工作是正常的。 |
20
ltoddy OP @xpresslink ok,我下午试试
|
21
xpresslink Nov 16, 2018
|
22
lixuda Dec 24, 2020 也遇到这个问题,flask url 是可以直接拼接 get 参数,django 找了 1 圈,没有发现,好像只能自己拼接。楼主不知道有没有找到比较优雅方式
|
25
lixuda Dec 28, 2020
@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> ``` 是类似这样吗 |