首页 > 解决方案 > 当我从 django 表单按下按钮时,没有任何反应

问题描述

我正在学习 django 表单,我正在尝试创建一个将创建标签的表单,在这里我遇到了一个问题,我试图找出它的问题,但我失败了。当我按下按钮“创建标签”时,什么都没有发生,也没有在views.py中发布方法,它不会引发错误,什么都没有。

表格.py:

from django import forms
from blog.models import Tag, Post
from django.core.exceptions import ValidationError


class TagForm(forms.ModelForm):
    class Meta:
        model = Tag
        fields = ['title', 'slug']

        widgets = {
            'title': forms.TextInput(attrs={'class': 'form-control'}),
            'slug': forms.TextInput(attrs={'class': 'form-control'}),
        }

    def clean_slug(self):
        new_slug = self.cleaned_data['slug'].lower()

        if new_slug == 'create':
            raise ValidationError('Slug must not be created')
        if Tag.objects.filter(slug__iexact=new_slug).count():
            raise ValidationError('Slug must be unique. We have "{}" slug already'.format(new_slug))

        return new_slug

网址.py:

from django.urls import path
from .views import *

# some-article

urlpatterns = [
    path('', posts_list, name='posts_list_url'),
    path('post/create/', PostCreate.as_view(), name='post_create_url'),
    path('post/<str:slug>/', PostDetail.as_view(), name='post_detail_url'),
    path('tags/', tag_list, name='tag_list_url'),
    path('tag/create', TagCreate.as_view(), name='tag_create_url'),
    path('tag/<str:slug>', TagDetail.as_view(), name='tag_detail_url'),
]

我的html模式:

{% extends 'blog/base_blog.html' %}

{% block title %}
    Tag Create - {{ block.super }}
{% endblock %}

{% block content %}

    <form action="{% url 'tag_create_url' %}" method="post">
       {% csrf_token %}

       {% for field in form %}
            <div class="form-group">
                {% if field.errors %}
                    <div class="alert alert-danger">
                        {{ field.errors }}
                    </div>
                {% endif %}
                {{ field.label }}
                {{ field }}
            </div>

       {% endfor %}
        <button type="submit" class="btn btn-primary">Create Tag</button>
    </form>

{% endblock %}

视图.py:

from django.shortcuts import render, redirect
from django.urls import reverse
from django.views.generic import View

from blog.models import Post, Tag
from blog.forms import TagForm, PostForm
from .utils import ObjectDetailMixin



class TagCreate(View):

    def get(self, request):
        form = TagForm()
        return render(request, 'blog/tag_create.html', context={'form': form})

    def post(self, request):
        bound_form = TagForm(data=request.POST)

        if bound_form.is_valid():
            new_tag = bound_form.save()
            return redirect(new_tag)
        return render(request, 'blog/tag_create.html', context={'form': bound_form})

如果有人可以解决它,我将不胜感激!

标签: pythonhtmldjangodjango-formsdjango-views

解决方案


推荐阅读