在 Django 中编写模板标签
我正在尝试定制一个用Django写的内容管理系统(CMS)。因为内容编辑者的灵活性不够,所以我想找个更好的解决方案。
简单来说,我希望它能像django-better-chunks或者django-flatblocks
那样。也就是说,我想在模板中设置一个可编辑的区域。我想把这些可编辑的区域和一些字符串以及对象实例结合起来。举个例子,假设有多个可编辑区域是基于同一个产品的:
{% block product_instance "title" %}
{% block product_instance "product description" %}
所以如果你有一个视图,里面有另一个产品作为product_instance
,那么这两个blocks
就会显示不同的数据。我还觉得可以有一些全站通用的块,只传递字符串部分。总的来说,我希望能够传递从1到无穷多个的标识符。
不过我在两个方面遇到了困难:
我该如何定义混合标识符和实际内容“
block
”实例之间的关系?我觉得内容类型可能会涉及到,但我真不知道从哪里开始找!我该如何写一个模板标签来读取上面的语法,并把它转换成一个可以渲染的对象呢?
1 个回答
2
为此,你可以创建一个包含标签,然后像这样使用它:
{% load my_tags %}
{% product bicycle <extra vars ...> %}
要定义这个标签,你需要在你的app/templatetags/mytags.py文件中添加:
@register.inclusion_tag('results.html')
def product(item, *extra):
#maybe repackage extra variables
#and add them to the returned dictionary
item_form = ItemForm(item) #form.ModelForm instance
return {'item': item, 'item_form':item_form, ...}
接下来,你需要一个模板来返回这个项目的html内容:
<h1>{{item.title}}</h1>
{{item_form}}
... add some conditional statements depending on extra vars