首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在通用详细视图django中使用get_context_data重定向

在通用详细视图django中使用get_context_data重定向
EN

Stack Overflow用户
提问于 2018-07-01 05:10:43
回答 1查看 1.1K关注 0票数 1

我有一个视图,其中我需要两个模型Book和UserFav,所以我使用了context:

代码语言:javascript
复制
class BookDetailView(LoginRequiredMixin, generic.DetailView):
    model = Book
    template_name = 'book_detail.html'

    def get_context_data(self, **kwargs):
        context = super(BookDetailView, self).get_context_data(**kwargs)
        context.update({
            'fav_list': UserFav.objects.filter(user=self.request.user)
        })
        return context

和另一个视图函数

代码语言:javascript
复制
def favorite(request, pk):
    book = get_object_or_404(Book, pk=pk)
    fav, created = UserFav.objects.get_or_create(user=request.user)
    fav.favorites.add(book)
    return render(request, 'book_detail.html', {'book': book})

常用函数的表单

代码语言:javascript
复制
<form action="{% url 'favorite' book.id %}" method="post" style="display: inline;">
{% csrf_token %}
<button type="submit" class="btn btn-danger btn-xs">
    <span class="glyphicon glyphicon-remove"></span>&nbsp; add this book to favourite
</button>

我的url

代码语言:javascript
复制
url(r'^book/(?P<pk>\d+)$', views.BookDetailView.as_view(), name='book-detail'),
url(r'^book/(?P<pk>\d+)/f/$', views.favorite, name='favorite'),

我需要fav_list的地方

代码语言:javascript
复制
{% if fav_list %}
{% for fav in fav_list %}
{% if book in fav.favorites.all %}Favorited
{% else %}
<form action="{% url 'favorite' book.id %}" method="post" style="display:inline;">
{% csrf_token %}
<button type="submit" class="btn btn-danger btn-xs">
    <span class="glyphicon glyphicon-remove"></span>&nbsp; add this book to favourite
</button>
 </form>
 {% endif %}
 {% endfor %}
 {% else %}
 <form action="{% url 'favorite' book.id %}" method="post" style="display: inline;">
{% csrf_token %}
<button type="submit" class="btn btn-danger btn-xs">
    <span class="glyphicon glyphicon-remove"></span>&nbsp; add this book to favourite
</button>
                                </form>
 {% endif %}

现在的问题是,当我被重定向到book_detail.html时,我没有得到模板所需的fav_list,如何正确地重定向或使用其他方式定义视图?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-01 05:34:06

您没有从favorite视图进行重定向。在表单提交时,被认为是重定向的良好做法。

试用

代码语言:javascript
复制
from django.shortcuts import redirect
from django.urls import reverse

def favorite(request, pk):
    book = get_object_or_404(Book, pk=pk)
    fav, created = UserFav.objects.get_or_create(user=request.user)
    fav.favorites.add(book)
    # if you have an app_name in urls.py file try this
    # return redirect(reverse('YOUR_APP_NAME:book-detail', args=(pk,)))
    return redirect(reverse('book-detail', args=(pk,)))

我希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51118513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档