【发布时间】:2022-01-09 04:32:53
【问题描述】:
(感觉像是“最佳实践”类型的问题,如果这些不属于这里,请见谅)
我正在构建一个具有用户注册和密码重置功能的网站,这两个功能都会向用户发送电子邮件,其中包含一个链接以单击以完成相应的过程。在暂存箱上进行测试时,我使用了一种肮脏的解决方法来完成概念证明——在模板中硬编码网站地址)不用说,我想尽快解决这个问题。环顾四周,找到了对 django.contrib.sites 的引用,这看起来像是一个可能的解决方案,尽管有一件事情让我很困扰 - 从技术上讲,只有一个站点,但有两个阶段,登台和生产。我不想与当前可能滥用的“网站”对抗,因为这些网站可能适用另一种解决方案。
然后我考虑了另一种方法 - 将相应的 URL 添加到相应的 settings.py 文件中,我已经掌握了其中一个 - 一个用于本地,一个用于暂存,一个用于生产。这里的问题可能很明显 - 我认为从模板中读取 settings.py 是不合适的(或可能的),并试图使解决方案尽可能简单,我使用了一些标准视图,这意味着我无权访问其代码,以向上下文添加值。也许我应该覆盖这些标准视图?只需调用“超级”,然后将我的自定义数据添加到上下文中?但我不知道这是否是正确的方法。
第三个选项似乎是添加一个自定义上下文处理器来实现相同的目标,即使设置值可用于感兴趣的模板。很抱歉关于“设计”多样性的长问题。
【问题讨论】:
-
您是否尝试过从请求对象中获取站点 url? stackoverflow.com/questions/2345708/…
-
如果您需要在@kmmbvnr 提到的请求中不可用的上下文中添加数据,那么通常的做法是为基于类的视图覆盖get_context_data(..)。如果您有许多具有相同需求的基于类的视图,请将您的 get_context_data 放在 Mixin 中。 Stackoverflow 上有很多例子
-
感谢你们俩;原来模板中已经有 {{ domain }} 的东西,它不起作用的原因是 nginx 配置中缺少一行
-
问题仍然存在 - 现有的上下文处理器中的哪个创建了该“域”?这些都来自我用来构建网站核心的教程,现在我希望我知道 LOL
标签: django django-templates django-settings django-context django-sites