Django представление возвращает данные
У меня есть представление, которое возвращает HTML response
с помощью render
. Возвращаемые данные специфичны для шаблона.
Если я хочу использовать эти данные на другой странице, я должен написать другое представление с той же логикой, или есть способ передать данные из представления 1 в представление 2
view
return render(request, 'pages/project_details.html', {"project": project,
урлы
path('show_project_details/<project_id>', view=show_project_details, name="show_project_details"),
Я знаю, что view
- это просто функция, которая принимает запрос и что-то с ним делает, но я не понимаю, как мне сделать запрос к представлению в шаблоне и получить ответ в существующей странице.
Пример здесь:
## filename: views.py
from django.shortcuts import render
from .models import Team
def index(request):
list_teams = Team.objects.filter(team_level__exact="U09")
context = {'youngest_teams': list_teams}
return render(request, '/best/index.html', context)
Я хочу вернуть данные внутри этого context
в home.html
и index.html
.
Надеюсь, это имеет смысл?
Вы можете использовать ваш urls.py для передачи переменных через нотацию URL.
Например - Получение информации о команде:
шаблон
{% for team in youngest_teams %}
<a href="{% url 'get_team_info' team.id %}">Team</a>
{% endfor %}
url.py
path('team_info/<team_id>', view=team_info, name="get_team_info")
views.py
def team_info(request, team_id=None):
team = Team.objects.get(id=team_id) #Information on team is passed.
В вашем случае есть несколько случаев. Позвольте мне объяснить их один за другим. Допустим, у вас есть два шаблона. Один - это шаблон 1, а другой - шаблон 2.
- Если вы хотите использовать одну и ту же логику для шаблона 1 и шаблона 2. Вы можете использовать переменную в views.py & url.py и использовать там условие на эту переменную, которая в вашем случае является team_id. Например,
def index(request, team_id):
list_teams = Team.objects.filter(team_level__exact="U09")
context = {'youngest_teams': list_teams}
if team_id == 1:
return render(request, '/best/index.html', context)
elif: team_id == 2:
return render(request, '/best/template2.html', context)
А в urls.py можно написать:
path('team_info/<int:team_id>', view=team_info, name="get_team_info")
- Если вам не нужна переменная в представлениях и URL. Тогда вы можете написать разные представления с одним и тем же кодом в views.py. Но в случае с несколькими идентификаторами это приведет к дублированию кода.