模板中的 Django 访问站点 name/url - 视图、上下文和设置

Django access site name/url in template - views, contexts and settings

(感觉像是“最佳实践”类型的问题,抱歉,如果这些不属于这里)

我正在构建一个具有用户注册和密码重置功能的网站,这两个功能都会向用户发送电子邮件,并带有 link 单击以完成相应的过程。在暂存盒上进行测试时,我使用了一个肮脏的解决方法来完成概念验证——在模板中硬编码网站地址)不用说,我想尽快解决这个问题。四处搜索,找到了对 django.contrib.sites 的引用,这看起来像是一个可能的解决方案,尽管有一件事困扰着我——从技术上讲,只有一个站点,但有两个阶段,即暂存和生产。我不想反对当前可能滥用的“网站”,而其他解决方案可能适用。

然后我考虑了另一种方法 - 将相应的 URL 添加到相应的 settings.py 文件,我已经掌握了这些文件 - 一个用于本地,一个用于暂存,一个用于生产。这里的问题可能很明显——我认为从模板中读取 settings.py 是不合适的(或不可能的),并试图使解决方案尽可能简单,我使用了一些标准视图,意味着我无权访问其代码,无法向上下文添加值。也许我应该覆盖这些标准视图?只需调用 'super' 然后将我的自定义数据添加到上下文中?但我不知道这是否是正确的方法。

第三个选项似乎是添加自定义上下文处理器以实现相同的目标,即使设置值可用于对其感兴趣的模板。抱歉,关于“设计”多样性的长问题。

好的,毕竟这是一条错误的路径 - 我模板中的 {{ domain }} 不起作用的原因(解析为 'localhost')是 nginx 配置中缺少的一行:

  location / {
    proxy_pass http://unix:/run/gunicorn.sock;
    proxy_set_header Host $http_host;
  }

(准确地说是 proxy_set_header 行)

不能说我 100% 理解这里发生的事情,但至少现在我可以继续前进;最大的问题是这个 {{ domain }} 指令来自哪里 - 无法分辨从教程复制的几个上下文处理器中的哪个放在:

"django.template.context_processors.debug",
"django.template.context_processors.request",
"django.contrib.auth.context_processors.auth",
"django.contrib.messages.context_processors.messages",