2016-06-02 11 views
0

Ich habe eine Tabelle mit Ergebnissen aus einer Suche. Das bedeutet, dass es hier keine Modelle gibt. Das Problem ist, dass ich auf eine Detailseite für einen angeklickten Artikel gehen möchte, aber ich bin nicht sicher, ob ich das tun kann, ohne es in die URL zu setzen.Django mit einer Variablen in mehreren Ansichten/Vorlagen

Gerade jetzt ist es so gemacht:

In meinem .html für jedes Element in der Tabelle:

<a href="{% url 'detail' title=item.name %}">view more</a></td> 

In meinem urls.py

url(r'^track/(?P<title>.+?)/$', detail, 
      name='detail'), 

In meiner Detailansicht , wo es die Variable verwendet:

def detail(request, title): 
    if request.method == 'GET': 
     ... 

Jetzt könnte das funktionieren, aber es ist nicht ideal für mich. Die URL enthält Whitespace und ist nicht urlencodiert, da ich die Variable so brauche wie sie ist. Ich frage mich, ob es etwas einfacher ist, oder besser Weg, um diese Variable zu einer anderen Ansicht oder die Vorlage passiert

Antwort

0

Den richtigen Weg, dies zu tun, ist eine get_absolute_url Methode auf der Modellklasse für Ihr item Modell zu definieren. Dies erfolgt typischerweise reverse verwendet wird, so ist es in etwa so aussehen würde:

def get_absolute_url(self): 
    from django.core.urlresolvers import reverse 
    return reverse('detail', kwargs={'title': self.title}) 

Dann in Ihrer Vorlage, die Sie einfach tun:

<a href="{{ item.get_absolute_url }}">view more</a> 

Und der Titel richtig übersetzt werden.

Das heißt, Sie könnten in Betracht ziehen, einen slug anstelle eines Titels zu verwenden, um Ihre URLs zu generieren.