django - 当必须在模板中格式化消息和作为 ajax 调用的响应时,避免在 Django 中重复
问题描述
我有一个聊天板,人们可以在其中发布可以包含附件和其他一些附加内容的消息。当我检索所有消息时,我会遍历它们并以这种方式显示每条消息(简化):
<p>Message posted by: <strong>{{ details.name }}</strong></p>
<p>{{ details.message }}</p>
<ul>
{% foreach attachment in attachments %}
<li>{{ attachment }}</li>
</ul>
{% endforeach %}
到目前为止,一切都很好。现在,我的困难是我使用 AJAX 来允许人们发布新消息。添加新消息后,我很难找到向用户显示此消息的最佳方式。问题是新消息需要以特定方式格式化(以上是简化;有各种条件和附加格式)。我可以想到三种方法:
- 我使用 javascript 来解析消息。这意味着我基本上有两次相同的代码,使用两种不同的语言(一次在 Django 的模板语言中用于所有现有消息,然后再次在 js 中用于新添加的消息)
- 我在视图中制作完全相同的 HTML 代码,因此当我通过 AJAX 返回响应时,它已经包含格式正确的代码。但是,这也将是代码的重复 - 一次在模板本身中,然后再次在视图中
- 我在模型中创建了一个新函数,用于创建所有正确的 HTML 代码(比如 formatMessage())。当我遍历现有消息时,我可以调用这个函数,当我添加一条新消息时,我可以调用相同的函数并在我的响应中返回它。
最后一个选项是唯一没有重复代码的选项。但是,它会在我的模态中引入大量代码,包括 HTML 代码,这似乎是一件很糟糕的事情。
有什么建议吗?
解决方案
没有理由不能在 Ajax 响应中使用模板。您可以将此模板片段提取到其自己的模板文件中,并在 Ajax 响应的情况下直接呈现它,或者将其包含在另一个模板中以进行正常的页面视图。
推荐阅读
- powershell - 如何从 Internet Explorer 导出收藏夹
- go - 我们如何知道用户通过 api 在 github 中更改了默认的个人资料图片
- python-2.7 - 使用 FLASK 框架解析带有转义字符的 JSON 正文
- sql - 如何将重复的标签/字符串数据插入表中
- php - Woocommerce - 在订单详细信息中显示总项目,需要找出放置它的位置
- javascript - 从某个半径内的多个 JSON 图层中选择标记
- javascript - 按值而不是用 chai 类型测试数组
- ruby-on-rails - cron 和 rake 任务有什么区别?
- c# - 序列化 protobuf 时的 XMLSerializer InvalidOperationException
- linux - 了解 cuobjdump 输出