Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 如何基于模型对象生成可重用的HTML块_Django_Django Templates - Fatal编程技术网

Django 如何基于模型对象生成可重用的HTML块

Django 如何基于模型对象生成可重用的HTML块,django,django-templates,Django,Django Templates,假设我有一个带有标题、价格、描述和图像字段的简单模型。我想3个html输出/块,我可以重用这个模型的每个对象。为了增加“复杂性”,将组合2个输出以形成第3个输出。下面是这3个输出在模板中的样子 输出图像 <span class="output_image"><img src="{{ object.image.url }}" alt="{{ object.title}}></span> 输出信息 <ul class="output_info">

假设我有一个带有标题、价格、描述和图像字段的简单模型。我想3个html输出/块,我可以重用这个模型的每个对象。为了增加“复杂性”,将组合2个输出以形成第3个输出。下面是这3个输出在模板中的样子

输出图像

<span class="output_image"><img src="{{ object.image.url }}" alt="{{ object.title}}></span>

输出信息

<ul class="output_info">
    <li>{{ object.title }}</li>
    <li>Price: {{ object.price }}</li>
    <li>{{ object.description }}</li>
</ul>
  • {{object.title}}
  • 价格:{{object.Price}}
  • {{object.description}}
输出_全部(结束前2个)


...
例如,我可能想在搜索页面上使用output_image,在列表和高级搜索中使用output_all。因此,我只想编写这个输出一次,并重用它。实现这一目标的最佳方式是什么

最初我想向模型类添加方法/属性,它将返回格式化的html。这是可行的,例如,在我的模板中,我可以调用
{{object.output_all}}
。这样输出html是一种不好的做法吗


我也简要地研究了其他方法。包含标记似乎可以工作,但我只使用“完整”版本的output_all案例进行了测试(即尚未在output_all中“嵌套”其他2个输出标记)。这是正确的方法吗?是否可以“嵌套”标记?

我将使用包含标记。在模板中保留演示逻辑。

如果我理解了您的问题,我认为这可以帮助您:关闭,但这似乎是针对静态内容的。我需要根据所选对象动态创建内容。是的,我认为你是正确的。但似乎存在“断开连接”,因为包含标记是在它们自己的文件中创建的,与模型没有“联系”。我可能会将错误的对象传递给标记。在我看来,在链接到html模板的模型文件中为模型指定包含标记更符合逻辑。因此,您可以使用
{{{object.special{u tag}}
,而不是
{%special{u tag object%}
,这将防止
{%special{u tag error{u object%}
(是的,我知道您不会这样传递对象,但我只是在演示如何使用上下文)。但我相信这是不可能的?
<div class="output_all">
    <span class="output_image">...</span>
    <ul class="output_info">...</ul>
</div>