'Best way of linking to a page in Django
I managed to create a URL tag for my index. But right now I'm confused how to add links to other pages.
I put this on my urls.py
url(r'^$', 'index', name='index'),
The next thing I put this tag into the href:
{% url 'index' %}
But what if I wanted to create a new page and would be linking to it. How would I do it the best way?
Solution 1:[1]
Django has updated urlpatterns to take 'path' instead of using url so it's become much more efficient. You don't have to use regex anymore
from django.urls import path
from . import views
urlpatterns=[
path('', views.index , name='index'),
path('blog/', views.blog , name='blog'),]
Then in templates, you can use template tagging
<a href="{% url 'index' %}">Index</a>
<a href="{% url 'blog' %}">Blog</a>
If you have multiple apps, you can tag it as follows. For example, if this is under 'post' app:
In post app urls.py:
from django.urls import path
from . import views
app_name = 'post'
urlpatterns=[
path('', views.index , name='index'),
path('blog/', views.blog , name='blog'),]
in the project urls.py:
from django.urls import path, include
urlpatterns=[
path('post/', include('post.urls'),]
In templates, you do as following:
<a href="{% url 'post:index' %}">Index</a>
<a href="{% url 'post:blog' %}">Blog</a>
Solution 2:[2]
Just use the same label {% url 'index' %}.
You may use each name in urls.py to link to the url.
urls.py
url(r'^archive/$', 'mysite.views.archive',name='archive'),
url(r'^about/$', 'mysite.views.about',name='about'),
url(r'^contact/$', 'mysite.views.contact',name='contact'),
template
<a href="{% url 'about' %}">About</a>
<a href="{% url 'contact' %}">Contact</a>
If you have many apps, use namespace
https://docs.djangoproject.com/en/dev/topics/http/urls/#url-namespaces-and-included-urlconfs
Solution 3:[3]
Create a new URL in the same format and give that name instead of index.
Eg:
url(r'^$', 'index', name='index'),
url(r'^new/page/$', 'new', name='new_page'),
{% url 'new_page' %}
Solution 4:[4]
Example:
urlpatterns = patterns('',
url(r'^$', views.index, name='index'),
url(r'^about/$', views.about', name='about'),
)
Now, in the html template rendered by your views.index you can have:
<a href ="{% url 'about' %}">about</a>
Solution 5:[5]
Use the below syntax:
<a href="{% url 'cart' %}" > Cart page </a>
Where URL 'cart' is the name field in your app URL pattern.
urlpatterns = [
#Leave as empty string for base url
path('', views.shop, name="store"),
path('cart/', views.cart, name="cart"),--------------------->
path('checkout/', views.checkout, name="checkout"),
path('shop/',views.shop, name="shop"),
]
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | |
| Solution 2 | |
| Solution 3 | Ajai |
| Solution 4 | |
| Solution 5 | Emi OB |
