Альтернатива жесткому кодированию urlpatterns в django
Я делаю сайт на django, на главной странице которого отображаются ссылки на домены... при нажатии на каждый домен появляются ссылки на соответствующие темы, а при нажатии на каждую тему появляются ссылки на соответствующие подтемы...
Проблема в том, что я хочу извлекать домены, темы и подтемы из базы данных с помощью запросов... что означает, что я не могу жестко закодировать url-шаблоны в моей программе...
Как сделать так, чтобы на главной странице я извлекал список доменов... отображал их... и при нажатии на них извлекал список тем под ними и отображал их по новой ссылке...
Вы можете включать параметры в свои пути. Действительно, например:
urlpatterns = [
path('<str:domain>/<str:topic>/<str:subtopic>/', some_view)
]
и определите ваше представление как:
def some_view(request, domain, topic, subtopic):
# …
Если вы затем посетите /science/physics/quantum/
, он вызовет some_view
с domain
, установленным на 'science'
, topic
установленным на 'physics'
и subtopic
установленным на 'quantum'
.
Рекомендуемый паттерн для моделей Django - это построение "толстых" моделей. В вашем случае я бы добавил методы в ваши модели, которые возвращают путь. Таким образом вы также сможете легко протестировать генерацию url.
Идея:
class Topic:
# ...
def get_absolute_url(self):
return reverse( ... )
def get_other_url(self):
return reverse( ... )