Django URL“重叠”

2024-06-07 08:29:30 发布

您现在位置:Python中文网/ 问答频道 /正文

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

下面是我的项目结构:

-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

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

from django.urls import path

from . import views

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

这是我的主URL.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'),
]

这是myproject URL.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'索引'%}时,它使用了url控制面板/索引,这是不应该的

当我为controlpanel创建导航栏并导入CSS时,我也遇到了这种情况,但我通过将文件夹重命名为“include”解决了这个问题。我通常只会重命名文件,以将其修复为index>;家等等。。但是这个应用程序应该被复制到现有的项目中,我不想用这种肮脏的方式

我不知道怎么修理它。任何帮助都将不胜感激


Tags: path项目djangonamefrompyimporturl
1条回答
网友
1楼 · 发布于 2024-06-07 08:29:30

正如您可能怀疑Django可以轻松解决此问题一样,您可以在Django documentation中看到一些示例

在每个URL.py文件中,您可以指定一个“应用程序名称”。在您的情况下,您可以执行以下操作:

from django.urls import path
from . import views

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

第二个URL.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现在知道在哪里查找“name”索引

相关问题 更多 >

    热门问题