Как отобразить параметр из URL в шаблон в представлениях на основе классов в Django - PullRequest
0 голосов
/ 03 июня 2019

Просмотреть ниже распечатывает список всех сообщений, сделанных определенным пользователем.Пользователь был параметром, взятым из URL, и работает нормально.

Как мне извлечь ** kwarg -> 'username' и отобразить его в шаблоне как переменную?

Попробовано, что закомментировано в коде.

views.py

class AuthorPostIndexView(ListView):
    model = Person
    template_name ='authorpostindex.html'
    context_object_name = 'author_post'

    #1)
    #date=request.GET.get('username','') -> wrong as varibales in classes
    #is not possible?

    #-> this works fine:

    def get_queryset(self):
        username = self.kwargs['username']
        queryset = Person.objects.get(username=username).post.all()
        return queryset, (username,'')



    #-> attempts to extract username kwarg:

    #2)
    # def get_context_data(self, **kwargs):
    #     context = super(AuthorPostIndexView, self).get_context_data(**kwargs)
    #     context['username'] = self.username
    #     return context

    #3)
    # @property
    # def username(self):
    #    return self.kwargs['username']

ожидаемый результат

template.html

<h1>{{username}}</h1> -> username from the URL should be displayed

Сообщения об ошибках:

1) «запрос» не определен (shell)

2) Объект AuthorPostIndexView не имеет атрибута 'username' (шаблон)

3) Реверс для 'post_detail' с аргументами '(' ',)' не найден.Попробован 1 шаблон (ов): ['post \ / (? P [0-9] +) $'] (шаблон)

пс.По-прежнему не работает после советов:

Решения выглядят одинаково, однако я думаю, что у меня есть проблема с получением аргумента kwarg из метода.Кроме того, я потерял уверенность в том, что положить в шаблон.

Могу ли я вернуть два аргумента в функцию, подобную этой?

class AuthorPostIndexView(ListView):
    model = Post
    template_name ='authorpostindex.html'
    context_object_name = 'author_post'

    def get_queryset(self):
       queryset = super().get_queryset()
       username = self.kwargs['username']

       return (queryset.filter(authors__username=username),username)

Или в одном из предложенных решений я добавил метод к представлению

def get_context_data(self, **kwargs):
        context = super(AuthorPostIndexView, self).get_context_data(**kwargs)

        context['username'] = self.kwargs['username']

        return context

...и тогда как насчет шаблона

authorpostindex.html

{{context}}
or
{{username}}
or
{{context.username}}

Это не работает

1 Ответ

2 голосов
/ 03 июня 2019

попробуйте

def get_context_data(self, **kwargs):
    context = super(AuthorPostIndexView, self).get_context_data(**kwargs)

    context['username'] = self.kwargs['username']
    # or
    context['username'] = self.request.GET.get('username', None)

    return context

надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...