Django as_p()方法等价于非表单/仅显示用例

8xiog9wr  于 2022-12-20  发布在  Go
关注(0)|答案(1)|浏览(115)

我有一些模型,每个模型有10多个字段。在我的第一个开发草案中,我不太关心事情的外观,并试图尽快获得代码的关键组件。我喜欢myForm.as内置在Forms对象中的www.example.com _p方法。主要的好处是,我可以根据需要更改模型,进行迁移,并且as_p将显示这些新字段,而不需要我更改模板。
我的问题是:是否有一种等效方法可以只显示用例?
我试着梳理文档,但没有发现表单之外的东西。理想的情况是类似于基于类的DetailView的东西,在模板中可以使用{{object.as_p }}。有人知道表单之外的动态显示功能吗?
正如在评论中提到的,我正在寻找一个为模型示例呈现html的模板标记。

q3qa4bjr

q3qa4bjr1#

TLDR:我在model类中为要显示的模型创建了一个“as_div”方法,并使用一组两列标记循环遍历所有字段。

models.py
...
from django.utils.safestring import mark_safe
...

class myModel(Model):
  ...

  def as_div(self):
      # build the HTML representation of the model instance
      html = "<div class='modelInstance'>"
      for field in self._meta.fields:
          html += "<div style='display: flex; width: 30%'>"
          html += "<div style='flex: 1'>" + field.verbose_name + "</div>"
          html += "<div style='flex: 1'>" + str(getattr(self, field.name)) + "</div>"
          html += "</div>"
          html += "</div><hr />"
      return mark_safe(html)

然后我在HTML模板中使用了这个方法名(as_div),如下所示:myModel.html

myModels.py
...
{% for myModel in myModels %}
    {{ myModel.as_div }}
{% endfor %}

我在研究django.forms API中使用的“as_div”辅助标记时遇到了this
as_div()使用的模板。默认值:“Django/表单/div. html”
这让我想到,我能不能在django/models/文件夹中创建一个模板,然后像表单那样引用它?这就更简单了。当你想在行级别上操作模型时(instances)你只需要给model Class添加一个方法。所以我写了上面的方法,网页上显示了一堆标签。哎呀。原来你必须使用django.utils.safestring库将它标记为安全的,然后它将呈现为实际的HTML。
现在的缺点是每个模型必须有完全相同的方法添加到它的类。我不喜欢重复代码,但这将不得不这样做,直到我找到一个更干净的方式。

相关问题