【问题标题】:Django: Change root url in applicationDjango:在应用程序中更改根 URL
【发布时间】:2021-05-20 06:28:15
【问题描述】:

我的服务器上有一个可用的应用程序/系统(Python 3.9、Django 3.1)。 现在我需要将它移动到另一个具有别名的服务器。

从这个www.myserver.com到这个www.otherserver.com/myapp

在 Apache2 配置中,我有行 WSGIScriptAlias /myapp /path/to/myapp/wsgi.py。 但现在我对应用程序中的所有链接都有问题,例如从索引页面到目录页面的链接重定向到www.otherserver.com/catalog,但我需要www.otherserver.com/myapp/catalog

  • Django 中有什么特性吗?
  • 是否可以在 settings.py 中只设置一些全局变量?
  • 我需要编辑模板中的所有链接吗?

什么是最好的解决方案?

【问题讨论】:

    标签: python django url hyperlink navigation


    【解决方案1】:

    您可以通过调整 ROOT_URLCONF 设置变量的值来进行设置。为此,您需要有两个 URL 模块

    #project/urls/myserver.py
    
    from django.contrib import admin
    from django.urls import include, path
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('app/', include('app.urls'))
    ]
    
    
    
    #project/urls/other_server.py
    from django.urls import include, path
    
    from .myserver import urlpatterns as my_server_patterns
    
    urlpatterns = [
        path('catalog/', include(my_server_patterns)),
    ]
    

    现在从环境中获取 ROOT_URLCONF 的值

    import os
    
    ROOT_URLCONF = os.environ.get("ROOT_URLCONF", "project.urls.myserver")

    【讨论】:

      【解决方案2】:

      一种快速的方法是在新路径中包含项目 url 模式。

      制作一个新的模式列表,例如base_patterns

      base_patterns = [
          path('admin/', admin.site.urls),
          path('app/', include('app.urls),
      ]
      

      在主 urls.py 的底部,在新路径中包含 base_patterns

      urlpatterns = [
          path('catalog/', include(base_patterns)),
      ]
      

      【讨论】:

        猜你喜欢
        • 2014-05-21
        • 2014-08-15
        • 2017-12-27
        • 2020-03-13
        • 1970-01-01
        • 2011-10-28
        • 1970-01-01
        • 2018-05-21
        • 2022-12-24
        相关资源
        最近更新 更多