Я новичок в Python и Django, поэтому у меня есть эти коды:
urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name='home'),
path('about', views.about, name='about'),
path('contact', views.contact, name='contact')
]
views.py
menus = [
{
"name": "Home",
"link": "/"
}, {
"name": "About",
"link": "/about"
}, {
"name": "Contact",
"link": "/contact"
},
]
def gnavi():
return {'menus': menus}
gnavi.html
<nav class="gnavi">
<ul>
{% for menu in menus %}
<li>
<a href="{{menu.link}}">
{{menu.name}}
</a>
</li>
{% endfor %}
</ul>
</nav>
base.html
{% load static %}<!DOCTYPE html>
<html lang="en">
<head>...</head>
<body>
<header class="header">
{% include 'inc/gnavi.html' %}
</header>
<main>
{% block content %}
{% endblock content %}
</main>
<footer>...</footer>
</body>
</html>
Template Structure:
+ templates
+ inc
- base.html
- gnavi.html
- home.html
- about.html
- contact.html
- ...
Как разместить "gnavi. html" на каждой странице, не вызывая его каждый раз в " def "?
# ! Problem: This code works but needs to be called each time a new page is added !
# -> Which is not very nice !
from django.shortcuts import render
from django.http import HttpResponse
def home(request):
return render(request, 'home.html', gnavi())
def about(request):
return render(request, 'about.html', gnavi())
def contact(request):
return render(request, 'contact.html', gnavi())
? Я хочу код должен вызываться только один раз, но применяться ко всем страницам, включая страницу, которая будет создана в будущем.