7 czerwca 2019

Dynamiczne linki w Django

Z poprzednich wpisów powinieneś dowiedzieć się o tym, w jaki sposób zainstalować Django, Jak stworzyć nową aplikację w Django oraz w jaki sposób wykonać widoki w Django.

W tym wpisie dowiemy się o kilku ciekawych sposobach które ułatwią i przyśpieszą naszą pracę przy tworzeniu aplikacji w Django.

Stworzenie adresów url w Django

Wejdźmy teraz do pliku „urls.py” w nim stworzymy trzy elementy listy które będą wyglądały następująco:

path('', views.home, name='frontpage'),
path('list', views.list, name='list'),
path('show/<str:text>', views.show, name='company_show')

Pierwszy element to oczywiście strona główna.
Drugi element to lista wszystkich firm.
Ostatni element to podstrona która wyświetli profil firmy rozpoznany dzięki adresowi url.

Przed podaniem elementów url należy dopisać powyżej przestrzeń nazw:

app_name = 'company'

Każda aplikacja w django powinna posiadać przestrzeń nazw. Dzięki temu nie będziemy mieć w przyszłości problemu z duplikowaniem się adresów url pomiędzy różnymi aplikacjami.

Stworzenie widoku

from django.shortcuts import render
from django.shortcuts import redirect

def home(request):
    return render(request, 'index.html')

def list(request):
    return render(request, 'list.html')

def show(request, text = False):

    if text == False:
        return redirect('/')

    return render(request, 'show.html', {'company_name':text})

Powyżej podałem całą zawartość pliku „views.py”.

Strona główna, czyli „home” to nic innego jak zwykłe załadowanie strony statycznej html, to samo tyczy się listy firm.

Funkcja „show” jest troszkę ciekawsza, gdyż w liście adresów url dopisaliśmy zmienną która jest przekazywana do wymienionej powyżej funkcji.

Interesującą nas zmienną nazwałem „text”, jeśli parametr z jakiegoś powodu nie będzie przekazany, przyjmie on wartość „False” co w konsekwencji wywoła przekierowanie na stronę główną.
Jeśli zmienna „text” nie będzie fałszem, wyrenderujemy stronę korzystając z pliku „show.html” oraz przekażemy do widoku zawartość zmiennej „text” do nowo utworzonej zmiennej „company_name”.

Dynamiczne linki w plikach html

Przechodzimy do najważniejszej części wpisu, czyli do linków.

Będąc w w jednym z plików html możemy zapisać odnośnik w sposób następujący:

<a href="company/list">click</a>

Minusem powyższego rozwiązania jest fakt, że gdybyśmy zmienili adres url w pliku „urls.py” będziemy zmuszeni sami przeszukać cały projekt i zmieniać również wszystkie odnośniki. Istnieje również ryzyko, że w naszej aplikacji będziemy posiadać błędne odnośniki/linki.

Poniżej przedstawię rozwiązanie dzięki któremu nie będziemy mieć powyższych problemów.

<a href="{% url 'nazwa_aplikacji:nazwa_adresu_url' 'opcjonalny_parametr' %}">click</a>

Według powyższego wzoru możemy wypisać kilka adresów zgodnych z naszą listą url:

<a href="{% url 'company:list' %}">Pokaż listę firm</a>
<a href="{% url 'company:frontpage' %}">Strona główna</a>
<a href="{% url 'company:company_show' 'FirmaX' %}">zobacz firmę</a>

Jeśli zmienimy adres url w „urls.py” wszystkie odnośniki w plikach html będą wciąż działać gdyż są generowane dynamicznie.

Jeśli wpiszemy powyższym sposobem odnośnik, którego nie mamy w aplikacji. Wywołany zostanie błąd.