Django:Drucken Sie die URL der Ansicht aus, ohne die URL fest zu codieren
Frage
Kann ich eine URL ausdrucken? /admin/manage/products/add
einer bestimmten Ansicht in einer Vorlage?
Hier ist die Regel, für die ich einen Link erstellen möchte
(r'^manage/products/add/$', create_object, {'model': Product, 'post_save_redirect': ''}),
Ich möchte /manage/products/add in einer Vorlage haben, ohne sie fest zu codieren.Wie kann ich das machen?
Bearbeiten: Ich verwende nicht den Standardadministrator (nun ja, aber er befindet sich unter einer anderen URL), dies ist mein eigener
Lösung
Sie können verwenden get_absolute_url
, aber das funktioniert nur für ein bestimmtes Objekt.Da Ihr Objekt noch nicht erstellt wurde, funktioniert es in diesem Fall nicht.
Sie möchten verwenden benannte URL-Muster.Hier ist eine kurze Einführung:
Ändern Sie die Zeile in Ihrer urls.py in:
(r'^manage/products/add/$', create_object, {'model': Product, 'post_save_redirect': ''}, "create-product"),
Dann verwenden Sie in Ihrer Vorlage Folgendes, um die URL anzuzeigen:
{% url create-product %}
Wenn Sie Django 1.5 oder höher verwenden, benötigen Sie Folgendes:
{% url 'create-product' %}
Mit benannten URL-Mustern können Sie einige leistungsfähigere Dinge tun, sie sind sehr praktisch.Beachten Sie, dass sie nur in der Entwicklungsversion (und auch 1.0) vorliegen.
Andere Tipps
Wenn du benutzt Benannte URL-Muster Sie können in Ihrer Vorlage Folgendes tun
{% url create_object %}
Die bevorzugte Methode zum Erstellen der URL ist das Hinzufügen von a get_absolute_url
-Methode zu Ihren Modellklassen hinzufügen.Sie können den Weg dorthin fest codieren, um der KISS-Philosophie zumindest näher zu kommen.
Sie können noch weiter gehen, indem Sie die nutzen permalink
Dekorator, der den Pfad basierend auf der URL-Konfiguration berechnet.
Weitere Informationen finden Sie in der Django-Dokumentation Hier.