Как передавать переменные между представлениями на основе классов в Django?

Я создал сервис url-shorter с помощью Django. Для создания короткой ссылки я использую CreateView:

class LinkCreate(CreateView):
    form_class = CreateLink
    template_name = "index.html"
    success_url = reverse_lazy('users_links')

    def form_valid(self, form):
        if self.request.user.is_authenticated:
            form.instance.creator = self.request.user

        self.link_short = generate_short_link()
        
        self.request.session["new_link"] = self.link_short

        form.instance.link_short = self.link_short
        return super().form_valid(form)

    # Showing last 5 shorted links on the page
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['object_list'] = URL.objects.all().order_by('-id')[:5]
        return context

После создания новой ссылки пользователь перенаправляется на страницу "users_links", где он должен увидеть новую отстрелянную ссылку. По этой причине в шаблоне я использую что-то вроде этого:

{% if request.session.new_link %}
    <div>
        Your new link: request.session.new_link
    </div>
{% endif %}

Проблема в том, что пользователь видит этот 'div' все время до конца сессии. Я думаю, что это неправильное решение использовать переменные сессии в этом случае, но я не знаю, как передать переменную между представлениями другим способом.

Я новичок в Django, не могли бы вы дать мне совет, как сделать это правильным образом?

{% for url in object_list %}
<div>
Your new link: {{url}}
</div>
{% endfor %}

Можно сначала сделать введение в Django, прежде чем переходить к CBV, показывать переменные должно быть довольно легко, а CBV немного абстрактны, поэтому лучше понять, как они работают.

object_list - тоже не лучшее имя переменной, вам следует назвать ее "links", потому что вы возвращаете список ссылок.

Вернуться на верх