Задать вопрос

Как в Django получить pk из запроса?

Добрый день. Унылый нубский вопрос.
Есть модель:

class News(models.Model):
    ....
    category = models.ForeignKey(Category,null=True,on_delete=models.SET_NULL)

class Category(models.Model):
    cat_name = models.CharField(max_length=50, unique=True)


Хочу получить все новости относящиеся к данной категории. Но не могу понять как получить pk из запроса.

url(r'^category/(?P\d+)/$', views.category, name='category'),


def category(request,pk):
    latest_news_category_list = News.objects.filter(category_id=pk).order_by('-pub_date')
    context = {'latest_news_category_list': latest_news_category_list}
    return render(request, 'news/detail.html', context)


Шаблон:

<p>Категория:<a href="{% url 'news:category' news.category.id %}"> {{ news.category }}</a></p>
  • Вопрос задан
  • 3278 просмотров
Подписаться 5 Оценить Комментировать
Решения вопроса 1
sim3x
@sim3x
url(r'^category/(?P<category_id>\d+)/$', views.category, name='category'),

# view
def category(request, category_id):
    latest_news_category_list = News.objects.filter(category=category_id).order_by('-pub_date')  # <<
    context = {
       'latest_news_category_list': latest_news_category_list, 
       'category': get_object_or_404(Category, id=category_id)}   #<< 404 если ид нет в бд 
    return render(request, 'news/detail.html', context)

# tpl

{% for news_item in latest_news_category_list %}
    <p>Категория:
        <a href="{% url 'news:category' category_id=news_item.id %}"> 
            {{ news_item.category.cat_name }} тайтл новости</a></p>
{% endfor %}

но лучше добавить в контекст отдельно категорию
<p>Категория:
        <a href="{% url 'news:category' category_id=category.id %}"> 
            {{ category.cat_name }}</a></p>


localhost:8000/news/category/1

Не используй зарезервированные имена переменных типа pk, id без понимания, что ты делаешь
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
Strikt Москва
от 100 000 до 180 000 ₽
ITK academy Саратов
от 75 000 ₽
Sim-Ba Pay Санкт-Петербург
от 180 000 ₽