python / intermediate
Snippet
Django URL-Konfiguration mit Namespace und Namen
URL-Namespacing in Django verhindert Namenskollisionen, wenn mehrere Apps ähnliche URL-Namen wie 'home' oder 'detail' verwenden. Die Variable app_name in der App-urls.py kombiniert mit Namespace in Projekt-urls.py erstellt das 'app:name' Muster. Diese Trennung bedeutet, dass shop:home und blog:home unterschiedlich sind und nicht kollidieren. In Templates verwende {% url 'namespace:name' args %} Syntax. In Python-Code generiert django.urls.reverse() URLs. Benannte URL-Muster verbessern Wartbarkeit: Eine Änderung des URL-Pfads erfordert nur das Aktualisieren des Musters, nicht jedes Template oder jeden View, das darauf verweist. Djangos Admin nutzt dieses Muster stark für Erweiterbarkeit.
snippet.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# project/urls.pyfrom django.urls import path, includeurlpatterns = [path('shop/', include('shop.urls', namespace='shop')),path('blog/', include('blog.urls', namespace='blog')),]# shop/urls.pyfrom django.urls import pathfrom . import viewsapp_name = 'shop' # Enables namespacingurlpatterns = [path('', views.home, name='home'),path('products/<int:pk>/', views.product_detail, name='product-detail'),path('category/<slug:slug>/', views.category_view, name='category'),]# blog/urls.pyapp_name = 'blog'urlpatterns = [path('', views.post_list, name='post-list'),path('<int:year>/<int:month>/<slug:slug>/', views.post_detail, name='post-detail'),]# Template usage:# <a href="{% url 'shop:product-detail' product.id %}">View Product</a># <a href="{% url 'blog:post-detail' post.date.year post.date.month post.slug %}"># Reverse in Python:# from django.urls import reverse# url = reverse('shop:product-detail', kwargs={'pk': 42})
django
Erklärung
1
namespace='shop'
Projekt-Level Namespace-Gruppierung für URL-Muster
2
app_name = 'shop'
App-Level Identifikator ermöglicht 'shop:url-name' Referenzierung
3
{% url 'shop:product-detail' product.id %}
Template-Tag referenziert namespaced URL mit Positionsargument