如何将URL参数添加到Django模板url标签?

问题描述 投票:66回答:5

在我看来,获取这样的url参数:

date=request.GET.get('date','')

在我的网址中,我试图以这种方式使用url模板标记传递参数,如下所示:

<td><a href="{% url 'health:medication-record?date=01/01/2001' action='add' pk=entry.id %}" >Add To Log</a></td>

之后的参数?显然不起作用,我怎样才能传递这个数据值以便用get获取?

django django-templates
5个回答
120
投票

首先,您需要准备好您的网址以接受正则表达式中的参数:(urls.py)

url(r'^panel/person/(?P<person_id>[0-9]+)$', 'apps.panel.views.person_form', name='panel_person_form'),

所以你在模板中使用它:

{% url 'panel_person_form' person_id=item.id %}

如果您有多个参数,则可以使用以下内容更改正则表达式并修改模板:

{% url 'panel_person_form' person_id=item.id group_id=3 %}

58
投票

我在这里找到了答案:Is it possible to pass query parameters via Django's {% url %} template tag?

只需将它们添加到最后:

<a href="{% url myview %}?office=foobar">
For Django 1.5+

<a href="{% url 'myview' %}?office=foobar">

[没有别的东西需要改进,但是当我修复代码时,我遇到了一个愚蠢的错误]


17
投票

只需添加模板URL:

<a href="{% url 'service_data' d.id %}">
 ...XYZ
</a>

用于django 2.0


4
投票

这可以通过三个简单的步骤完成:

1)使用url标签添加项目ID:

{% for item in post %}
<tr>
  <th>{{ item.id }}</th>
  <td>{{ item.title }}</td>
  <td>{{ item.body }}</td>
  <td>
    <a href={% url 'edit' id=item.id %}>Edit</a>
    <a href={% url 'delete' id=item.id %}>Delete</a>
  </td>
</tr>
{% endfor %}

2)添加urls.py的路径:

path('edit/<int:id>', views.edit, name='edit')
path('delete/<int:id>', views.delete, name='delete')

3)在views.py上使用id:

def delete(request, id):
    obj = post.objects.get(id=id)
    obj.delete()

    return redirect('dashboard')

1
投票

我不确定我是否离开了主题,但我找到了解决方案;您有一个基于类的视图,并且您希望将get参数作为模板标记:

class MyView(DetailView):
    model = MyModel

    def get_context_data(self, **kwargs):
        ctx = super().get_context_data(**kwargs)
        ctx['tag_name'] = self.request.GET.get('get_parameter_name', None)
        return ctx

然后你提出你的请求/mysite/urlname?get_parameter_name='stuff

在模板中,当您插入{{ tag_name }}时,您将可以访问get参数值('stuff')。如果您的模板中有一个也需要此参数的网址,则可以执行此操作

 {% url 'my_url' %}?get_parameter_name={{ tag_name }}"

您不必修改您的网址配置

© www.soinside.com 2019 - 2024. All rights reserved.