Как в 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>
  • Вопрос задан
  • 3222 просмотра
Решения вопроса 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 без понимания, что ты делаешь
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы