Django:Stampa l'URL di visualizzazione senza codificare l'URL
Domanda
Posso stampare un URL /admin/manage/products/add
di una determinata vista in un modello?
Ecco la regola per la quale voglio creare un collegamento
(r'^manage/products/add/$', create_object, {'model': Product, 'post_save_redirect': ''}),
Vorrei avere /manage/products/add in un modello senza codificarlo.Come posso fare questo?
Modificare: Non sto utilizzando l'amministratore predefinito (beh, lo sto facendo ma è su un altro URL), questo è il mio
Soluzione
Puoi usare get_absolute_url
, ma funzionerà solo per un oggetto particolare.Poiché il tuo oggetto non è stato ancora creato, in questo caso non funzionerà.
Vuoi usare modelli URL denominati.Ecco una breve introduzione:
Cambia la riga nel tuo urls.py in:
(r'^manage/products/add/$', create_object, {'model': Product, 'post_save_redirect': ''}, "create-product"),
Quindi, nel tuo modello usi questo per visualizzare l'URL:
{% url create-product %}
Se utilizzi Django 1.5 o versioni successive ti serve questo:
{% url 'create-product' %}
Puoi fare cose più potenti con i pattern URL con nome, sono molto utili.Tieni presente che sono solo nella versione di sviluppo (e anche 1.0).
Altri suggerimenti
Se usi modelli di URL con nome puoi fare quanto segue nel tuo modello
{% url create_object %}
Il modo preferito per creare l'URL è aggiungere un file get_absolute_url
metodo alle classi del modello.Puoi codificare il percorso lì in modo da avvicinarti almeno a seguire la filosofia KISS.
Puoi andare oltre utilizzando il file permalink
decoratore che calcola il percorso in base alla configurazione degli URL.
Puoi leggere di più nella documentazione di Django Qui.