【问题标题】:Django urls "overlapping"Django url“重叠”
【发布时间】:2021-05-09 03:54:34
【问题描述】:

我用谷歌搜索了这个问题,没有找到任何有用的东西。

这是我的项目结构:

-myproject
  -controlpanel
    -urls.py
    -views.py
    -templates
       -controlpanel
          -index.html
       -include
          -navbar.html

  -main
    -urls.py
    -views.py
    -templates
       -main
          -index.html
       -partials
          -navbar.html

  -myproject
    -urls.py

这是我的控制面板 urls.py 文件:

from django.urls import path

from . import views

urlpatterns = [
    path('', views.index, name='index'),
    path('servers', views.servers, name='servers'),
]

这是我的主要 urls.py 文件:

from django.urls import path

from . import views

urlpatterns = [
    path('', views.index, name='index'),
    path('join', views.join, name='join'),
    path('rules', views.rules, name='rules'),
    path('services', views.services, name='services'),
    path('stats', views.stats, name='stats'),
    path('gdpr', views.gdpr, name='gdpr'),
    path('login', views.login, name='login'),
]

这是我的项目 urls.py:

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('', include('main.urls')),
    path('controlpanel/', include('controlpanel.urls')),
    path('admin/', admin.site.urls),
]

现在当用户没有指定任何子目录时,他应该被重定向到 app main 中的 index.html。

问题是一些 {% url 'urlname' %} 从其他项目返回 url。例如,当我在主应用导航栏中使用 {% url 'index' %} 时,它使用了不应该使用的 url 控制面板/索引。

当我为控制面板创建导航栏并导入 CSS 时,这也发生在我身上,但我通过将文件夹重命名为“包含”解决了这个问题。我通常只是重命名文件以将其修复为 index > home 等。但是这个应用程序应该被复制到现有项目中,我不想以这种肮脏的方式来做。

我不知道如何解决它。任何帮助将不胜感激。

【问题讨论】:

    标签: python python-3.x django django-templates


    【解决方案1】:

    您可能已经怀疑 Django 可以轻松解决这个问题,您可以在 Django documentation 中查看一些示例

    在每个 urls.py 文件中,您可以指定一个“app_name”。在您的情况下,您可以执行以下操作:

    from django.urls import path
    from . import views
    
    app_name = 'controlpanel'
    urlpatterns = [
        path('', views.index, name='index'),
        path('servers', views.servers, name='servers'),
    ]
    

    第二个urls.py

    from django.urls import path
    from . import views
    
    app_name = 'main'
    urlpatterns = [
        path('', views.index, name='index'),
        path('join', views.join, name='join'),
        path('rules', views.rules, name='rules'),
        ...
    ]
    

    现在,您可以在任何反向或 url 模板标签中包含应用名称,如下所示:

    {% url 'main:index' %}
    {% url 'controlpanel:index' %}
    

    Django 现在知道在哪里查找“名称”索引

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-04
      • 2016-06-04
      • 2011-09-24
      • 1970-01-01
      • 2021-01-15
      • 1970-01-01
      相关资源
      最近更新 更多