gpt4 book ai didi

django - 如何让 Django url dispatcher 使用子域?

转载 作者:行者123 更新时间:2023-12-01 04:17:35 24 4
gpt4 key购买 nike

我对如何解决这个问题有一个模糊的想法,但真的需要插入:)

我有一个使用 apache (mod_wsgi) 运行的 Django 应用程序。今天的网址是这样的:
http://site.com/category/A/product/B/

我想做的是:
http://A.site.com/product/B

这意味着 url 调度程序需要获取在子域中找到的值并了解其上下文,而不仅仅是查看路径。我看到两种方法:

  • 使用 .htaccess 并重写,以便 a.site.com 是重写。不确定这是否有效,因为我不完全了解 django url 调度程序框架在这种情况下会看到什么?
  • 了解 url 调度程序如何工作,我可以编写一个过滤器来查看有效的子域,并以重写的格式将其提供给 url 调度程序代码。

  • 非常感谢任何提示或解决方案!谢谢。

    最佳答案

    你看了吗django.contrib.sites ?我认为这是一个组合,设置 SITE_ID在您的 settings.py ,并且每个“站点”拥有一个 WSGI 文件可以解决问题。

    编辑: -v放。

    django.contrib.sites旨在让您从同一个 Django 项目和数据库运行多个站点。它添加了一个表( django.contrib.sites.models.Site ),其中包含 domainname领域。据我所知,name可以表示任何您想要的意思,但通常是站点的英文名称。 domain是应该显示在 URL 的主机部分的内容。
    SITE_ID设置在 settings.pyid所服务的网站。在初始settings.py文件,它被设置为 1(没有注释)。您可以将其替换为您需要将其设置为正确值的任何代码。

    显而易见的事情是检查一个环境变量,并在 name 中查找它。或 domain Site 中的字段表,但我不确定这是否会在 settings.py 中起作用文件,因为该文件设置了数据库连接参数(循环依赖?)。所以你可能不得不满足于这样的事情:

    SITE_ID = int(os.environ.get('SITE_ID', 1)

    然后在您的 WSGI 文件中,您执行以下操作:
    os.environ['SITE_ID'] = 2

    并将最后一个数字设置为适当的值。每个站点需要一个 WSGI 文件,或者可能有一种方法可以从 Apache 设置中设置 SITE_ID。选择哪条路径取决于相关站点设置。

    站点框架在您使用的地方最强大 Site作为 ForeignKey 的目标或 ManyToManyField以便您可以将模型实例(即记录)链接到特定站点。

    关于django - 如何让 Django url dispatcher 使用子域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3145148/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com