Django, как создать путь: <model_id>/<model_id>/template
Предыстория этого вопроса заключается в том, что я пытаюсь найти способ создания двустороннего интерфейса с двумя различными типами пользователей.
- Пользователи типа 1 смогут определять определенные действия, которые будут выполняться пользователями типа 2 .
- Пользователи типа 2 будут иметь доступ к задачам, предоставленным пользователем типа 1. Однако все пользователи типа 2 не будут иметь доступ ко всем задачам. Пользователь типа 2 A может иметь другие действия, чем пользователь типа 2 B.
Установив путь <model_id>/<model_id>/template
, я подумал, что это будет хорошим способом обеспечить ясность в пути url, а также фильтровать доступ к данным.
На примере модели под названием Project, когда я ищу ссылку на один pk_id, я обычно делаю примерно следующее:
#views.py
def show_project(request, project_id):
projects = Project.objects.get(pk=project_id)
return render(request, 'main/show_project.html',{'projects':projects})
#url.py
path('show_project/<project_id>',views.show_project,name="show-project"),
#template.py (referrer)
<a class="btn btn-outline-secondary" href="{% url 'show-project' project.id %}">{{project}}</a>
Делая это, я, очевидно, могу фильтровать то, что я хочу показать, основываясь на ID модели.
Я подумал, что могу сделать нечто подобное, добавив еще один слой <model_id>/<model_id>/template
.
Придерживаясь приведенного выше примера: <user_id>/<project_id>/template
.
Так что я придумал следующее, что явно не работает.
просмотров
def function(request, user_id, project_id):
user = User.objects.get(pk=user_id)
project = Project.objects.get(pk=project_id)
return render(request, 'main/test_url.html',{'project':projects, 'users':user})
url
path('<user_id>/<project_id>/test_url',views.test_url,name="test-url"),
шаблон (реферер)
<a class="btn btn-outline-danger " href="{% url 'test-url' user.id project.id %}">See Test URL</a>
1.Первая ошибка - передача проектов в словарь 'project':projects. Должно быть project('project':project).
def function(request, user_id, project_id):
user = User.objects.get(pk=user_id)
project = Project.objects.get(pk=project_id)
return render(request, 'main/cart_page.html',{'project':project, 'users':user})
- В пути отсутствует косая черта. Вместо функции вы передаете шаблон представлениям, но вам нужна функция представления. Она должна быть такой:
urls.py
urlpatterns = [
path('<user_id>/<project_id>/test_url/', views.function, name="test-url"),
]
- В шаблоне вместо user.id должно быть users.id (вызов идет по ключам переданного вами словаря и у вас это users).
templates
<p>{{ project }}</p>
<p>{{ users }}</p>
<a href="{% url 'test-url' users.id project.id %}">Refresh the page</a>
адрес: http://localhost:8000/1/1/test_url/