Объясните пример кода из django
Есть некоторый код:
#nameApp/url.py
urlpatterns = [
path('<int:rubric_id>/', by_rubric),
]
также, еще это:
# nameApp/views.py
def by_rubric(request, rubric_id):
bbs = Bb.object.filter(rubric=rubric_id)
rubrics = Rubric.objects.all()
current_rubric = Rubric.objects.get(pk=rubric_id)
context = {
'bbs': bbs,
'rubrics' : rubrics,
'current_rubric': current_rubric,
}
return render(request, 'bboard/ by_rubric . html', context)
В книге написано:
rubric_id- имя параметра контроллера, которому будет присвоено значение этого URL-параметра.
Я не понимаю как и какое значение попадает в этот url параметр.
Ответы (3 шт):
в urls.py
ты прописываешь маршруты для твоего приложения
например то, что ты прописал
path('<int:rubric_id>/', by_rubric),
означает что когда пользователь будет переходить по страницам вида
www.your-site.com/10/
www.your-site.com/11/
...
то у тебя будет вызываться view by_rubric и в параметре rubic_id будут передаваться значения (10,11 из url страницы которую открыл пользователь)
подробней про конфигурацию url можно найти в документации https://docs.djangoproject.com/en/3.0/ref/urls/#module-django.urls.conf
К примеру есть ссылка http://yoursite/article/id-article
И то, что будет вместо id-article получит ваш параметр функции и преобразован в тот тип, что указан в urls.py
Первое и самое основное, что я тебе посоветую, так это закрыть или лучше сожги книгу дронова и забудь о ней как страшный сон.
Лучше почитай книгу Антонио Меле, она тоже далека от идеала, но по крайней мере в ней меньше говнокода.
Касательно твоего вопроса:
rubric_id - это что-то, что может передаваться твоей функции, когда ты переходишь по ссылке.
В данной строке current_rubric = Rubric.objects.get(pk=rubric_id) ты получаешь id объекта категории. pk - это id, и тут (pk=rubric_id) мы получаем этот самый id, можно записать и так : (id=rubric_id)