如何解决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)
我有两个处理视图的函数,它们都分别继承自 UpdateView
和 DetailView
。
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 举报,一经查实,本站将立刻删除。