(Django) Обратные динамические URL с несколькими аргументами, используя Django Views - PullRequest
0 голосов
/ 15 октября 2019

Я пытаюсь передать два аргумента, чтобы создать динамический URL для каждого поста приложения блога, над которым я работаю. Я получаю это, если я передаю идентификатор, но не знаю, какой синтаксис при использовании аргументов +1 (и не делаю ли я все правильно).

Я хочу, чтобы URL были 'post/<int:pk>/<slug:slug>/'но может заставить его работать только с идентификатором: 'post/<int:pk>/

Вот как у меня это сейчас:

URLS.PY

    urlpatterns = [
    ...
    path('post/<int:pk>/<slug:slug>/', PostDetailView.as_view(), name='post-detail'),
    path('post/new/', PostCreateView.as_view(), name='post-create'),
    path('post/<int:pk>/<slug:slug>/update/', PostUpdateView.as_view(), name='post-update'),
    path('post/<int:pk>/<slug:slug>/delete/', PostDeleteView.as_view(), name='post-delete'),
    ...
    ]

VIEWS.PY

   class PostDetailView(DetailView):
        model = Post

Я вызываю это в шаблоне:

   <ul class="secondary-menu menu-list">
        <li class="menu-item"><a href="{% url 'post-update' object.slug %}">Edit Post</a></li>
    <li class="red-button"><a href="{% url 'post-delete' object.slug %}">Delete</a></li>
    </ul>

И имею эту функцию для получения пути к любому конкретному экземпляру в MODELS.py

   def get_absolute_url(self):
        return reverse('post-detail', kwargs={'pk': self.pk, 'slug':slug})

Я получаюследующая ошибка во время рендеринга шаблона

Reverse for 'post-detail' with arguments '(1,)' not found. 1 pattern(s) tried: ['post/(?P<pk>[0-9]+)/(?P<slug>[-a-zA-Z0-9_]+)/$']

Ответы [ 3 ]

1 голос
/ 15 октября 2019
    def get_absolute_url(self):
        return reverse('post-detail', kwargs={'pk': self.pk, 'slug':self.slug})

вы пропустили self в slug, иначе вам нужно передать slug как parameter в function, если self не требуется.

0 голосов
/ 16 октября 2019

Я нашел ошибку.

Настройки для файлов URLS.PY, VIEWS.PY были в порядке.

Как упоминали @Exprator и @Mohammed Aadil, я пропустил self в slug в файле MODELS.PY.

Но у меня продолжала появляться та же ошибка, потому что я не обновлял urls из всех шаблонов html. Кстати, если вы не уверены в синтаксисе передачи нескольких аргументов в url, вот как это работает для меня: {% url 'post-detail' post.id post.slug %}

0 голосов
/ 15 октября 2019

Вам нужно передать slug как self.slug, а также, если слаг пустой или нулевой, ваш обратный URL не будет работать.

get_absolute_url(self):
        return reverse('post-detail', kwargs={'pk': self.pk, 'slug':self.slug})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...