【问题标题】:How to pass context objects as Django url template tag arguments如何将上下文对象作为 Django url 模板标签参数传递
【发布时间】:2017-12-07 01:06:54
【问题描述】:

在我的 django 项目中,我有两个模型类 - 类别和动作。 Category 是 Action 的 ForeignKey(所有 Action 都属于一个 Category)。

在我的 django 模板中,我希望能够将上下文对象传递给 {% url %} 标记,该标记接受包含类别名称作为参数的字符串。所以在一个完美的世界里,我的 django 模板会有这样一行:

<form action="{% url 'actions' {{ category }} %}">

当提交时,Django 会跟随表单到一个 urlpattern,比如:

url(r'^(?P<category_name>\w+)', views.actions, name='actions'),

但不幸的是,我似乎无法将模板过滤器嵌套到模板标签中。我可以在 url 标记中引用 Django 对象的 ForeignKey 的另一种方法是什么?或者也许是一种不同的方式来构建我的代码?

【问题讨论】:

  • 您的问题是什么,您需要将一个字符串传递到该类别对象的名称的 url 中?是吗?
  • 是的,完全正确。问题是因为它是一个跨多个类别使用的 django 模板,所以不能对字符串进行硬编码(例如,我不能只用 'Category_One' 代替 {{ category }} 因为如果我正在尝试访问“Category_Two”)
  • 这个问题经常出现,我不明白为什么人们认为你需要在模板标签中使用变量语法。 documentation for the url tag 甚至有几个直接使用变量的例子。
  • 在我的项目中,在 Action 的详细信息页面中,有一个按钮可以使用同一类别中另一个随机选择的 Action 的详细信息页面刷新页面。最初,传入过滤器是我能找到的唯一方法,使该按钮返回同一类别的另一个操作,无论您当前位于哪个详细信息页面。

标签: python django templates


【解决方案1】:

上下文变量在url templatetag中直接可用:

<form action="{% url 'actions' category_name=category %}">

【讨论】:

  • 谢谢!此响应使我意识到我在代码中遇到的另一个错误(我将 QuerySet 而不是实际对象传递到变量类别中)。修复它并结合使用此语法解决了问题!
猜你喜欢
  • 2011-01-08
  • 2021-06-05
  • 2017-08-11
  • 2014-08-06
  • 1970-01-01
  • 2021-02-11
  • 2021-09-10
  • 1970-01-01
  • 2019-03-11
相关资源
最近更新 更多