Django Navbar, как я передаю продукт ПК каждой отдельной ссылке - PullRequest
0 голосов
/ 10 ноября 2018

Это вопрос о том, как передать pk модели продукта на панель навигации, где вызов может происходить с разных страниц / представлений, т. Е. Не всегда со страницы сведений о продукте.

Я использую базовый шаблон для моей панели навигации, а затем у меня есть html-страница и представление для каждой ссылки в панели навигации, например:

Описание товара - product_form.html - views.ProductUpdateView.as_view()

Цвета - productcolours_list.html - views.ProductColourListView.as_view()

моя навигационная панель

Идея навигационной панели заключается в том, что когда я смотрю, например, на продукт А, я могу переходить между страницей сведений о товаре, цветами товара, а затем перечнем материалов. Вот как выглядит код navbar:

<li class="nav-item">
    <a class="nav-link" href="{% url 'ProductUpdateView' pk=product.pk %}">Product Details</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" href="{% url 'ProductColourListView' pk=product.pk %}">Colours</a>
  </li>

Проблема в том, что это работает, только когда я нахожусь на странице сведений о продукте, потому что базовый шаблон может интерпретировать, что такое product.pk. Но как только я нажимаю, чтобы перейти к ссылке «Цвета» на панели навигации, он пытается отобразить базовый шаблон, и внезапно он не понимает, что такое product.pk.

Это связано с тем, что на странице «Сведения о продукте» используется модель Product через ProductUpdateView (с которой я затем могу ссылаться на product.pk), а на странице «Цвета» используется модель ProductColour через ProductColourListView, которая в этом случае будет colours.product.pk.

Как будто мне нужен базовый шаблон, чтобы понять, откуда взять ПК, в зависимости от того, захожу ли я со страницы «Сведения о продукте», со страницы «Цвета» или с другой страницы.

1 Ответ

0 голосов
/ 10 ноября 2018

Почему бы вам не поместить продукт в контекст в представлении, которое не манипулирует вашим продуктом как единым объектом?

class ProductColourListView(generic.ListView):
    model = models.ProductColour

    def get_context_data(self, **kwargs):
        kwargs.setdefault('product', put_here_your_product)
        return super().get_context_data(**kwargs)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...