2016-08-08 33 views
2

Ich arbeite an einem Projekt in Django und ich habe ein Problem beim Umleiten von einer Seite zu einer anderen auf den Klick eines Links. Egal, was alles, was ich versucht habe, habe ich am Ende wie eine URL zu müssen:Django Redirect von einer Seite zu einer anderen

localhost:8080/page1/page2

statt von localhost:8080/page1 zu localhost:8080/page2 bewegen

Ich habe versucht, mithilfe von HttpResponseRedirect(url)

+1

Sie müssen sicherstellen, dass 'URL' immer mit einem Schrägstrich beginnt: '"/page2 "'. –

+0

Danke für deinen Vorschlag @DanielRoseman, aber ich mache das schon. –

+0

Wie erstellst du 'URL'? mit 'reverse' oder' reverse_lazy'? Oder konstruieren Sie es beim Rendern in der Vorlage? – nkhumphreys

Antwort

3

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.

+0

@ warownia1 Ich habe gerade Venu im Stackoverflow-Chat geholfen und ziemlich genau die genaue Antwort gegeben, die du in deinen Schnitt eingegeben hast. Um Wiederholungen zu sparen, habe ich sie gebeten, sie als die richtige zu markieren :) – nkhumphreys