微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Django UpdateView 返回一个空白的渲染模板

如何解决Django UpdateView 返回一个空白的渲染模板

我使用 django allauth 进行用户身份验证,在我的适配器中我修改get_login_redirect_url重定向 新用户加入 ONBOARD_URL,这样他们就可以完成注册过程,而普通用户则获得预期的 LOGIN_REDIRECT_URL

class UserAccountAdapter(DefaultAccountAdapter):
    def get_login_redirect_url(self,request):
        if request.user.is_authenticated and (not request.user.name or not request.user.avatar
                                              or not request.user.mobile):
            url = settings.ONBOARD_URL
        else:
            url = settings.LOGIN_REDIRECT_URL
        return resolve_url(url)

我有两个处理视图的函数,它们都分别继承自 UpdateViewDetailView

class UpdateUserAfterSignupView(LoginrequiredMixin,UpdateView):
    model = User
    form_class = UpdateUserAfterSignupForm
    template_name = 'users/user_form.html'
    context_object_name = 'user'
    success_url = reverse_lazy('users:detail')
class UserDetailView(LoginrequiredMixin,DetailView):
    model = User
    slug_field = 'username'
    slug_url_kwarg = 'username'
    template_name = 'users/user_detail.html'
    context_object_name = 'user'

    def get_object(self,queryset=None):
        return get_object_or_404(self.model,username=self.request.user.username)

在我的 DetailView 中,如果我省略 get_object,它会返回一个 PageNotFound 404,但是当它按原样出现时,我会得到一个空白页 在渲染的模板中。这是模板:

{% extends 'base.html' %}
{% block content %}
<p>welcome {{user}}</p>
<form action="" method="post" enctype="multipart/form-data">{% csrf_token %}
    {{ form.as_p }}
    <button type="submit" value="submit">submit</button>
</form>
{% endblock %}

我的 url conf 看起来像这样

[
    path('<str:username>/',views.UserDetailView.as_view(),name='detail'),path('complete-signup/',views.UpdateUserAfterSignupView.as_view(),name='complete_signup'),]

同样,所有这些都会导致一个空白的渲染模板,什么都没有。你能建议我应该做的事情吗 不同,或添加。我可以根据需要提供更多信息。谢谢

编辑

DetailView 模板如下所示:

{% extends 'base.html' %}
{% block content %}
<p>{{user.name}}</p>
{% if user.avatar %}
<p><img src="{{ user.avatar.url }}" alt=""></p>
{% endif %}
<p>{{ user.mobile }}</p>
{% endblock %}

我的基本模板如下所示:

<!DOCTYPE html>
<html lang="en">
<head>
    <Meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    {% block content %}
    {% endblock %}
</body>
</html>

编辑 2 我的模板目录设置如下所示:

'Dirs': [
            os.path.join(BASE_DIR / 'templates'),os.path.join(BASE_DIR / 'auth_templates'),],

解决方法

终于可以使用了,这些是我的更改:

适配器

class UserAccountAdapter(DefaultAccountAdapter):
    def get_login_redirect_url(self,request):
        if request.user.is_authenticated and (not request.user.name and not request.user.avatar and
                                              not request.user.mobile):
            return reverse('users:complete_signup',kwargs={'username': request.user.username})

        else:
            return resolve_url(settings.LOGIN_REDIRECT_URL)

DetailView

class UserDetailView(LoginRequiredMixin,DetailView):
    model = User
    slug_field = 'username'
    slug_url_kwarg = 'username'
    template_name = 'users/user_detail.html'
    context_object_name = 'user'

    def get_object(self,queryset=None):
        return get_object_or_404(self.model,username=self.request.user.username)

更新视图

class UpdateUserAfterSignupView(LoginRequiredMixin,UpdateView):
    model = User
    slug_field = 'username'
    slug_url_kwarg = 'username'
    form_class = UpdateUserAfterSignupForm
    template_name = 'users/user_update.html'
    context_object_name = 'user'

网址

urlpatterns = [
    path('<str:username>/',views.UserDetailView.as_view(),name='detail'),path('<str:username>/complete-signup/',views.UpdateUserAfterSignupView.as_view(),name='complete_signup'),]

我的 detail URL 匹配任何内容,包括 complete_signup URL。这些更改帮助解决了这个问题,模板现在显示了预期的表单,而不是之前显示的空白页面。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。