2012-11-29 6 views
6

Chciałbym wiedzieć, w jaki sposób mogę przekazać adres URL jako parametr uwzględnienia w szablonie django.Jak przekazać adres URL jako parametr obejmujący

Mam w moim kodzie plik HTML, który służy do tworzenia przycisku. Więc kiedy chcesz dodać ten przycisk, po prostu go dołączę. Problem polega na tym, że 1 z parametrów to URL i na razie nie znalazłem innego rozwiązania niż umieszczenie adresu URL tekstu.

więc co mam to:

{% include "button.html" with title="title" link="/new-event/" %} 

i chciałbym mieć coś takiego:

{% include "button.html" with title="title" link={% url myview.view%} %} 

Dziękuję bardzo!

Odpowiedz

4

Uważam, że trzeba by przypisać adres URL do zmiennej, która jest dodawana do kontekstu, aby użyć go w znaczniku include.

Przykład:

widok:

from django.core.urlresolvers import reverse 

def your_view(request): 
    url = reverse('the_url_name_to_reverse', args=[], kwargs={}) 
    return render(request, 'the-template.html', {'url': url}) 

szablon:

{% include "button.html" with title="title" link=url %} 

Jeżeli jest to wartość, którą trzeba w każdym szablonie, można rozważyć dodanie procesora kontekstowego dodaj odwróconą wartość url do kontekstu

+0

Dzięki za odpowiedź. W rzeczywistości to było to, czego szukałem. – trnsnt

+0

Bardzo proszę. Cieszę się, że mogłem pomóc. – Brandon

2

Niektórzy mogą uznać to rozwiązanie bardziej odpowiednie:

najpierw utworzyć filtr

from django.core.urlresolvers import reverse 
@register.filter() 
def rev(value): 
    return reverse(value) 

następnie używać go w szablonie jak ten

{% include "button.html" with title="title" link="myview.view"|rev %} 
+0

Uwielbiam to; unika wypełniania widoku niepotrzebnym kodem. –

7

Czy próbowałeś tej składni:

{% url 'some-url-name' arg arg2 as the_url %} 
{% include "button.html" with title="title" link=the_url %} 
+1

Jest zwięzły, działa i nie wymaga napisania dodatkowego kodu. Dzięki. – Mael