Django, как создать путь: <model_id>/<model_id>/template

Предыстория этого вопроса заключается в том, что я пытаюсь найти способ создания двустороннего интерфейса с двумя различными типами пользователей.

  1. Пользователи типа 1 смогут определять определенные действия, которые будут выполняться пользователями типа 2
  2. .
  3. Пользователи типа 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})
  1. В пути отсутствует косая черта. Вместо функции вы передаете шаблон представлениям, но вам нужна функция представления. Она должна быть такой:

urls.py

urlpatterns = [
    path('<user_id>/<project_id>/test_url/', views.function, name="test-url"),
]
  1. В шаблоне вместо 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/

Вернуться на верх