【发布时间】:2021-05-29 10:10:21
【问题描述】:
我正在使用 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'),
],
【问题讨论】:
-
A
DetailView没有form,因此渲染{{ form }}没有多大意义。 -
我不完全确定我理解你的意思,但是渲染表单的模板是由更新视图而不是详细视图处理的。请详细说明一下好吗?
-
能否请您编辑您的问题并发布两个模板的完整模板代码以及任何基本模板。
-
@evergreen 我刚刚做了。谢谢
-
您的
{% extend ... %}和user_detail和user_form模板的顶部是否有行?如果是这样,请您添加这些。
标签: django django-allauth