Django KeyError at /manhattan/{% url 'activity' }
Передо мной поставили задачу создать проект NYC Guide на основе Python и Django. Я итерирую вложенный словарь, чтобы отобразить районы, мероприятия и места. На главной странице перечислены несколько районов. На странице районов перечислены несколько мероприятий в каждом районе. На странице мероприятий перечислены несколько мест, которые можно выбрать. Моя проблема заключается в том, что при нажатии на одно из мест проведения мероприятий я получаю ошибку. Я пытаюсь хотя бы вывести страницу мероприятий, на которой есть простая надпись "VENUES PAGE". Буду рад любому совету или обратной связи. Это мой первый проект на Django, так что простите меня, если я не объяснил все достаточно подробно. Не стесняйтесь спрашивать о дальнейших объяснениях! В конечном итоге я пытаюсь создать url, который ведет меня на страницу venue.html. Он не обязательно должен отображать конкретное место проведения мероприятия. Я могу сделать это оттуда. Я застрял на одном шаге. Я уже успешно отобразил страницы района и мероприятий, и я смог просмотреть ключ/значения мест проведения, чтобы отобразить ключ места проведения на странице мероприятий. Но я не могу просмотреть страницу мест проведения мероприятий, когда я нажимаю на место проведения мероприятия. (Самый последний шаг в моем проекте, так близко!)
/ Вот мой views.py, я думаю, что неправильно заполняю контекстные переменные
`from django.shortcuts import render
from .boroughs import boroughs
def city(request):
if request.method == 'GET':
return render(request=request, template_name='city.html', context={'boroughs': boroughs.keys()})
def borough(request, borough):
if request.method == 'GET':
return render(request=request, template_name='borough.html', context={'borough': borough, 'activities': boroughs[borough].keys()})
def activity(request, activity, borough):
if request.method == 'GET':
return render(request=request,
template_name='activity.html', context=.
{'venues': boroughs[borough][activity].keys(),
'activity': activity, 'activities':
boroughs[borough].keys()})
def venue(request, venue):
if request.method == "GET":
return render(request=request,
template_name='venue.html',
context={'venue': venue})`
/ Вот мой файл venues.html. Я бы хотел, чтобы меня перебрасывало на эту страницу с общим заголовком VENUES. url, который я использую на странице деятельности, ломается каждый раз, когда я нажимаю на него.
`<h1>{{ activity | title }}</h1>
<ul>
{% for venue in venues %}
<li>
<a href="{% url 'activity' }">{{venue|title}}</a>
</li>
{% endfor %}
</ul>`
/Здесь находится мой activity.py. Здесь код ломается. Когда я нажимаю на одно из мест, перечисленных на этой странице
`<h1>{{ activity | title }}</h1>
<ul>
{% for venue in venues %}
<li>
<a href="{% url 'activity' }">{{venue|title}}</a>
</li>
{% endfor %}
</ul>`
/ Вот моя страница borough.html. Это работает, но я решил включить это, чтобы вы увидели, как я перехожу от страницы к странице
`<h1>{{ borough | title }}</h1>
<ul>
{% for activity in activities %}
<li>
<a href="{%url 'activity' borough activity%}">
{{activity|title}}</a>
</li>
{% endfor %}
</ul>`
//urls.py, последний путь - это путь, с которым у меня проблемы.
from django.urls import path
from nyc import views
urlpatterns = [
path('', views.city, name='city'),
path('<str:borough>', views.borough, name='borough'),
path('<str:borough>/<str:activity>', views.activity, name='activity'),
path('<str:borough>/<str:activity>/<str:venue>/', views.venue, name='venue')
]
URLS.PY
from django.urls import path
from nyc import views
appname = "nyc_site "
urlpatterns = [
path('', views.city, name='city'),
path('<str:borough>/', views.borough, name='borough'),
path('<str:borough>/<str:activity_param>/', views.activity, name='activity'),
path('<str:borough>/<str:activity>/<str:venue_param>/', views.venue, name='venue')
]
VIEWS.PY :
def city(request):
if request.method == 'GET':
return render(request=request, template_name='city.html',
context={'boroughs': boroughs.keys()})
def borough(request, borough_param):
if request.method == 'GET':
return render(request=request,
template_name='borough.html', context={'borough':
borough_param, 'activities': boroughs[borough_param].keys()})
def activity(request, activity_param, borough, venues):
if request.method == 'GET':
return render(request=request, template_name='activity.html',
context={'venues': boroughs[borough][activity_param].keys(),
'activity': activity_param, 'activities':
boroughs[borough].keys()})
def venue(request, venue_param):
if request.method == "GET":
return render(request=request,
template_name='venue.html',
context={'venue': venue_param})
VENUES.html
<h1>{{ activity | title }}</h1>
<ul>
{% for venue in venues %}
<li>
<a href="{% url 'nyc_site:activity' borough=*enter_borough_param* activity=*enter_activity_parameter* }">{{venue|title}}</a>
</li>
{% endfor %}
</ul>
ACTIVITY.html
<h1>{{ activity | title }}</h1>
<ul>
{% for venue in venues %}
<li>
<a href="{% url 'nyc_site:venues' borough=*enter_borough_param* activity=*enter_activity_parameter* venue=*enter_venue_parameter* %}">{{venue|title}}</a>
</li>
{% endfor %}
</ul>`
BOROUGH.html
<h1>{{ borough | title }}</h1>
<ul>
{% for activity in activities %}
<li>
<a href="{% url 'nyc_site:activity' borough=*enter_borough_param* activity=*enter_activity_parameter* }"> {{activity|title}}</a>
</li>
{% endfor %}
</ul>