更改电子邮件/个人资料图片的表单未显示?



如有任何关于此问题的指导,我们将不胜感激。我输入了必要的字段,这样用户就可以在个人资料页面上编辑个人资料图片、用户名和电子邮件。当我创建表单时,它只显示更新按钮和";配置文件信息";文本如何修复此问题,以便显示用于编辑用户信息的表单?

视图.py

''

@login_required
def profile(response):
if response.method == "POST":
u_form = UserUpdateForm(response.POST, instance=response.user)
p_form = ProfileUpdateForm(response.POST, response.FILES, instance=response.user.profile)
if u_form.is_valid() and p_form.is_valid():
u_form.save()
p_form.save()
messages.success(response, f'Your account has been updated!')
return redirect("/profile")
else:
u_form = UserUpdateForm(instance=response.user)
p_form = ProfileUpdateForm(instance=response.user.profile)
args = {}
args['u_form']= u_form,
args['p_form']= p_form
return render(response, 'register/profile.html')

''

形式.py''

from django import forms
#from django.contrib.auth. import login, authenticate
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from django.contrib.auth.models import User
from .models import Profile
from django.forms import ModelForm

class RegisterForm(UserCreationForm):
email = forms.EmailField()
class Meta:
model = User
fields = ["username", "email", "password1", "password2"]
class UserUpdateForm(forms.ModelForm):
email = forms.EmailField()
class Meta:
model = User
fields = ["username", "email"]

class ProfileUpdateForm(forms.ModelForm):
class Meta:
model = Profile
fields = ['image']

''

在profile.html 中

{% extends "register/base.html" %}
{% load crispy_forms_tags %}
{% block content %}
<div class="content-section">
<div class="media">
<img class="rounded-circle account-img" src="{{ user.profile.image.url }}">
<div class="media-body">
<h2 class="account-heading">{{ user.username }}</h2>
<p class="text-secondary">{{ user.email }}</p>
</div>
</div>
<div class="container">
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
<fieldset class="form-group">
<legend class="border-bottom mb-4">Profile Info</legend>
{{ u_form|crispy }}
{{ p_form|crispy }}
</fieldset>
<div class="form-group">
<button class="btn btn-outline-info" type="submit">Update</button>
</div>
</form>
</div>
{% endblock content %}

要在模板中呈现某个变量,必须将其作为上下文传递给模板。行中:

return render(response, 'register/profile.html')

你永远不会把它传给上下文。render接受可选的第三个参数作为上下文。所以这条线应该是:

return render(response, 'register/profile.html', args)

注意:您接受视图中的request参数为response!这用词不当!请求是用户向服务器发出的,响应是服务器返回的。您应该接受参数为request

最新更新