Die empfohlene Weg ist {% url 'url-name' arg1 arg2 kwarg='foo' %}
in Django-Vorlage zu verwenden. Sie sollten URLs in Ihrer Vorlage nicht hartcodieren, sondern URL-Namen verwenden.
Weitere Details: https://docs.djangoproject.com/en/1.9/ref/templates/builtins/#url
Das Äquivalent in Python-Code ist django.utls.reverse
die te absolute URL oder django.shortcuts.redirect
gibt, die zu HttpResponseRedirect(reverse('url_name'))
https://docs.djangoproject.com/en/1.10/ref/urlresolvers/#django.urls.reverse
EDIT # 1 Artikel entspricht
Verwenden Datenbank zu übergeben zwischen Ansichten.
models.py
from django.db.models import Model
class Item(Model):
# your model fields
views.py
def list_view(request):
items = Item.objects.all()
context = {'items': items}
return render(request, 'list_template.html', context)
def details_view(request, item_id):
item = Item.objects.get(id=item_id)
context = {'item': item}
return render(request, 'details_template.html', context)
urls.py
urlpatterns = [
url(r'^/list/$', views.list_view, name='list')
url(r'^/details/(?P<item_id>[0-9]+)/$', views.details_view, name='details'),
]
list_template.html
<!-- your html -->
<ul>
{% for item in items %}
<li>
<a href="{% url 'details' item.id %}">item number {{ item.id }}</a>
</li>
{% endfor %}
</ul>
<!-- your html -->
{% url ... %}
Tag produziert absolute URL-Muster namens "Details" und Ersatz Teil der Adresse mit Funktionsargument. In den Adressen, statt (?P<item_id>[0-9]+)
, haben Sie Artikel-ID z. /details/1/
. Wenn Sie auf den Link klicken, wird die Nummer 1
von Regex abgerufen und an das Funktionsargument übergeben, wo Sie Ihr Element aus der Datenbank übernehmen können.
Sie müssen sicherstellen, dass 'URL' immer mit einem Schrägstrich beginnt: '"/page2 "'. –
Danke für deinen Vorschlag @DanielRoseman, aber ich mache das schon. –
Wie erstellst du 'URL'? mit 'reverse' oder' reverse_lazy'? Oder konstruieren Sie es beim Rendern in der Vorlage? – nkhumphreys