如何在自定义模板标签中传递 url 标签?
Posted
技术标签:
【中文标题】如何在自定义模板标签中传递 url 标签?【英文标题】:How to pass an url tag in a custom template tag? 【发布时间】:2017-05-29 00:38:55 【问题描述】:我正在学习 Django 构建一个小型站点,我发现我有很多模板用于列出对象,每个模板都有指向它的链接。 我想我可以制作一个自定义模板标签,比如
% object_list some %
some
是字典 'list': obj_list, 'link': link
其中obj_list
是我要打印的对象列表,link
应该是指向该项目的一些 url 结构。
模板(称为object_list.html)应该看起来像
% for object in object_list %
<li><a href="% url myapp:object object.id %">object.name</a></
% endfor %
现在,我的问题是我不知道在 url 中做什么。我希望它灵活一些,例如,将 'myapp:object' 替换为参数 'link',例如,如果对象类型是 User,那么我使用 %url myapp:user user.id%
。
可以这样做吗?怎么样?
我尝试了this solution,格式为
% for object in object_list %
% url 'link' as my_url %
<li><a href="% url my_url object.id %">object.name</a></li>
% endfor %
将'myapp:myobject'
作为参数,但它不起作用。准确地说,在模板中
% load property_extras %
% object_list property_dict %
property_dict
是我的参数,templatetag/property_extras.py
是保存标签的文件,会给出 NoReverseMatch 错误(如果我使用普通模板 - 没有自定义标签 - 它工作正常)。
更多信息,我的模板标签是
@register.inclusion_tag('properties/object_list.html')
def object_list(object_dict):
print(object_dict['list'])
print(object_dict['link'])
return
'object_list': object_dict['list'],
'link': object_dict['link'],
【问题讨论】:
【参考方案1】:相信你可以使用
% for object in object_list %
<li><a href=" object.get_absolute_url ">object.name</a></li>
% endfor %
并完全删除 % url %
的使用。为您的模型定义方法get_absolute_url
是根据documentation 解决问题的推荐方法。
【讨论】:
【参考方案2】:使用% url 'link' as my_url %
不起作用,因为您使用的是文字字符串'link'
,并且您没有包含对象ID。你的意思是:
% url link object.id as my_url %
不清楚为什么将结果保存到my_url
,因为您不会在任何地方使用my_url
。也许您希望下一行是:
<a href=" my_url ">object.name</a></li>
但是,我认为您在这里并不需要as my_url
。它默默地吞下你可能不想要的错误。这样做会更简单:
<a href="% url link object.id as my_url %">object.name</a></li>
【讨论】:
以上是关于如何在自定义模板标签中传递 url 标签?的主要内容,如果未能解决你的问题,请参考以下文章
织梦CMS如何在自定义表单页调用arclist标签啊,怎么在自定义表单页调用无效!