Как я могу добавить представление шаблона и определение пули в одно представление?

#django #django-models #django-views

#django #django-модели #django-представления

Вопрос:

Итак, я работаю над некоторым Django, но немного новичок в этом. У меня есть этот фрагмент кода:

 from django.shortcuts import render, render_to_response, get_object_or_404
from .models import Article
from django.views.generic import TemplateView

def view_post(request, slug):
    return render_to_response('news/article.html', {'post': get_object_or_404(Article, slug=slug)})

class ArticleView(TemplateView):
    template_name = "news/article.html"
    def get(self, request):
        article = Article.objects.all()
        return render(request, self.template_name ,{'article': article })
 

Как я могу записать это в одно представление, чтобы я мог использовать его в своем urls.py ?

Прямо сейчас это мой urls.py:

 from django.conf.urls import url, include
from .views import view_post

urlpatterns = [
    url(r'^blog/view/(?P<slug>[^.] )', view_post , name='view_blog_post'),
]
 

Как я могу добавить их вместе? Потому что я также хочу, чтобы переменные были доступны в моем шаблоне.

Комментарии:

1. Вы хотите объединить оба этих представления в одно?

2. Да или объединить их вместе в urls.py может быть? Но я не знаю как.

3. Создайте объект ArticleView в view_post. Этот способ может вам помочь

Ответ №1:

Я думаю, это то, что вы хотите.

 class ArticleView(DetailView):
    query_pk_and_slug = 'slug'
    template_name = 'news/article.html'
    context_object_name = 'post'
    model = Article

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['article'] = Article.objects.all()
        return context
 

Комментарии:

1. Как тогда переменные статей будут доступны в шаблоне?

2. Мой urls.py теперь выглядит примерно так: urlpatterns = [ url(r'^news/(?P<slug>[^.] )', ArticleView.as_view() , name='view_blog_post'), ] Это нормально, верно?

3. Я нашел это {{ post.object }} , спасибо за решение, Нафис!