如何实现 Django 命名空间

问题描述 投票:0回答:1

我已经开始了 Django 之旅,我非常喜欢它。我确实有一个关于命名空间的问题,我希望有人能够帮助我并解释为什么它会这样工作。

我知道命名空间用于确保如果有两个同名页面,则 url 和反向函数指向正确的页面。我一直在尝试在我正在编写的测试应用程序中实现名称空间,但未能做到。

这是我到目前为止所拥有的(这没有命名空间,因为我无法让它工作。

从应用程序 urls.py 中提取

from django.urls import path, re_path
from . import views



urlpatterns = [

 path('', views.index, name = "index"),
]

项目网址.py

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



urlpatterns = [
    path('admin/', admin.site.urls),
    path('accounts/', include('django.contrib.auth.urls')),
    path('index/', include('gallery.urls')),
]

最后,这是我的应用程序文件夹中的 view.py 文件

from django.shortcuts import render
from django.urls import reverse


# Create your views here.

def index(request):
    return render(request,"gallery/index.html")

任何帮助将不胜感激

django namespaces
1个回答
2
投票

URL 命名空间允许您唯一地反转命名 URL 模式,即使不同的应用程序使用相同的 URL 名称也是如此。对于第三方应用程序来说,始终使用命名空间 URL 是一个很好的做法。同样,如果部署了应用程序的多个实例,它还允许您反转 URL。换句话说,由于单个应用程序的多个实例将共享命名 URL,因此命名空间提供了一种区分这些命名 URL 的方法。请参阅 URL 命名空间

您的情况:

项目urls.py

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



urlpatterns = [
    path('admin/', admin.site.urls),
    path('accounts/', include('django.contrib.auth.urls', namespace='your-namespace')),
    path('index/', include('gallery.urls',namespace='your-namespace')),
]

从应用程序 urls.py 中提取

from django.urls import path, re_path
from . import views

app_name = 'app'
urlpatterns = [

 path('', views.index, name = "index"),
]

在模板中:

{% url 'app:index' %}
© www.soinside.com 2019 - 2024. All rights reserved.