을 사용하는 방법을 장고. 내 models.py 내 app 폴더에 templatetags 폴더를 만들었습니다. 또한 빈 inint .py 파일을 templatetags 폴더에 만들어 저장했습니다. 그런 다음 템플릿 태그 폴더에 getattribute.py라는 파일을 만들고 위 링크에서 찾은 스 니펫을 getattribute.py 파일에 복사하여 붙여 저장했습니다.그래서 내가 장고 템플릿에서 (이 링크에 있음)이 getAttribute를 기능 <a href="https://snipt.net/Fotinakis/django-template-tag-for-dynamic-attribute-lookups/" rel="nofollow">https://snipt.net/Fotinakis/django-template-tag-for-dynamic-attribute-lookups/</a></p> <p>를 사용하려면 템플릿 태그
이 내 템플릿 모습입니다 :
<html>
<body>
<form method="post" action="">{% csrf_token %}
{{ form.first_name }} {{form.last_name }} <br>
{{ form.username }} {{ form.password }} <br>
<input type="submit" value="Register"/>
</form>
{% load getattribute %}
{% for field, error in form.errors.items %}
{% if forloop.counter == 1 %}
{% with field_obj=form|getattribute:field %}
{{ field_obj.label }}{{ error | striptags }}
{% endwith %}
{% endif %}
{% endfor %}
</body>
</html>
내 models.py 보이는 방법이있다.
class Users(models.Model):
alpha_field = RegexValidator(regex=r'^[a-zA-Z]+$', message='Name can only contain letters')
user_id = models.AutoField(unique=True, primary_key=True)
username = models.SlugField(max_length=50, unique=True)
first_name = models.CharField(max_length=50, verbose_name='first Name', validators=[alpha_field])
last_name = models.CharField(max_length=50, validators=[alpha_field])
password = models.SlugField(max_length=50)
내 forms.py는 this입니다.
class UsersForm(forms.ModelForm):
class Meta:
model = Users
widgets = {'password':forms.PasswordInput()}
def __init__(self, *args, **kwargs):
super(UsersForm, self).__init__(*args, **kwargs)
self.fields[ 'username' ].widget.attrs[ 'placeholder' ]="Username"
self.fields[ 'first_name' ].widget.attrs[ 'placeholder' ]="First Name"
self.fields[ 'last_name' ].widget.attrs[ 'placeholder' ]="Last Name"
self.fields[ 'password' ].widget.attrs[ 'placeholder' ]="Password"
self.fields['first_name'].label='first Name'
는이 내가 서버를 실행하면, 형태가 오류없이 표시되고, 이제 내 views.py
def home_page(request):
form = UsersForm()
if request.method == "POST":
form = UsersForm(request.POST)
if form.is_valid():
form.save()
c = {}
c.update(csrf(request))
c.update({'form':form})
return render_to_response('home_page.html', c)
입니다. 그러나 의도적으로 이름 섹션을 작성하지 않고 제출을 누르면 '이 입력란은 필수 입력란입니다.'라고 표시됩니다. 자세한 이름을 말하면 스 니펫은 템플릿에 {{field_obj.label}}을 사용하는 경우 자세한 이름을 말하도록되어 있습니다. 그러나 어떤 이유에서든 자세한 이름을 표시하지는 않습니다. templatetags를 제대로 사용하지 않기 때문에 짐작할 수 있습니다.
def clean(self):
first_name = self.cleaned_data.get('first_name')
if password is None:
raise forms.ValidationError('This is a custom error message.')
return self.cleaned_data
그런 다음, 템플릿, 당신은 같은 코드를 가질 수 있습니다 : 양식에서
음, 재미 있습니다. 괜찮 감사. 'self.cleaned_data.get ('first_name ') 행과 self.cleaned_data 리턴 행은 어쨌든 어떻게됩니까? – user2817200
보기에서 form.is_valid()를 호출하면 request.POST의 데이터를보고 양식에 바인딩합니다. https://docs.djangoproject.com/en/dev/ref/forms/validation/ 에서 양식을 읽으십시오. form.is_valid() – james
form.is_valid()를 호출 할 때보기에서 데이터를 봅니다. 귀하의 요청에. 포스 및 양식에 바인딩합니다. 문서를 통해 읽기 : https://docs.djangoproject.com/en/dev/ref/forms/validation/ form.is_valid() 메소드는 기본적으로 양식 유효성 검사를 수행합니다 (양식에 유효성 검사기가있는 경우). 필드), self.cleaned_data는 기본적으로 유효성이 검사 된 필드입니다. 우리가 self.cleaned_data를 반환하는 이유는 - 나는 django 1.5를 사용했다. 어떤 이유로 form.clean()은 정리 된 항목의 사전을 반환해야했다.개발 버전은 그 요구 사항을 제거한 것 같습니다. – james