crispy form 在template不显示

问题遇到的现象和发生背景

crispy form 在template里不显示

用代码块功能插入代码,请勿粘贴截图

Model.py


class Event(models.Model):
    
    STATUS_CHOICES = (
        ('draft', 'Draft'),
        ('published', 'Published'),
    )
    title = models.CharField(max_length=70, null=True)
    body = models.TextField(null=True)
    created_time = models.DateTimeField(auto_now_add=True, null=True)
    status = models.CharField(max_length=10, choices=STATUS_CHOICES, null=True)
    abstract = models.CharField(
        max_length=54, blank=True, null=True,
        help_text="get the first 54 text",
    ) 
    views = models.PositiveIntegerField(default=0, null=True) 
    likes = models.PositiveIntegerField(default=0, null=True)
    topped = models.BooleanField(default=False, null=True) 

    def __str__(self):
        return self.title
    
    class Meta:
        ordering = ['-created_time']

forms.py

    class Meta:

        model = Event

        fields = [
            'title',
            'body',
            'status',
            'abstract',
            'topped',
        ]

views.py


    def addeventform(self, request, *args, **kwargs):
        """A from to add new events"""
        # allow template to pass in an empty form
        event_form = EventForm()

        # then save the form if method is post and form is valid
        if request.method == 'POST':
            event_form = EventForm(request.POST)

            if event_form.is_valid():
                event_form.save()
                return redirect('addevent')
        
        context = {
            'event_form': event_form,
        }

        return render(request, 'comment/addevent.html', context)

template

            <form method="POST" action="/addevent/" class="form mb-2" enctype="multipart/form-data">
              {% csrf_token %}
              {{ event_form|crispy }}
              <p>testingp>
            form>


运行结果及报错内容

无报错,就是无法显示form

我的解答思路和尝试过的方法

def addeventformview(request):
# dictionary for initial data with
# field names as keys
context = {}

# add the dictionary during initialization
event_form = EventForm(request.POST or None)
if event_form.is_valid():
    event_form.save()
     
context['event_form'] = event_form
return render(request, "comment/addevent.html", context)
我想要达到的结果

谁能找到form不显示的解决办法?

如果没人的话,我来试试

你那content只有 event_form 我想知道你那个crispy是个啥哪里来的,你把它删了看能不能显示

可以试试
https://www.likecs.com/ask-2457760.html


 
    def addeventform(self, request, *args, **kwargs):
        """A from to add new events"""
        # allow template to pass in an empty form
        event_form = EventForm()
 
        # then save the form if method is post and form is valid
        if request.method == 'POST':
            event_form = EventForm(request.POST)
 
            if event_form.is_valid():
                event_form.save()
                return redirect('addevent')
        
        context = {
            'event_form': event_form,
        }
 
        return render(request, 'comment/addevent.html', context)

最后一段代码应该是return render(request, 'comment/addevent.html', context=context)。
你也可以这样写:


    def addeventform(self, request, *args, **kwargs):
        """A from to add new events"""
        # allow template to pass in an empty form
        event_form = EventForm()
 
        # then save the form if method is post and form is valid
        if request.method == 'POST':
            event_form = EventForm(request.POST)
 
            if event_form.is_valid():
                event_form.save()
                return redirect('addevent')
      
 
        return render(request, 'comment/addevent.html', context = {'event_form': event_form,})

views.py对象参数返回不对,是context=context,jinjia2参数调用不对,是对象里的event_form呀,咋能直接调。修改如下,有帮助的话采纳一下哦!
views.py

 
    def addeventform(self, request, *args, **kwargs):
        """A from to add new events"""
        # allow template to pass in an empty form
        event_form = EventForm()
 
        # then save the form if method is post and form is valid
        if request.method == 'POST':
            event_form = EventForm(request.POST)
 
            if event_form.is_valid():
                event_form.save()
                return redirect('addevent')
        
        context = {
            'event_form': event_form,
        }
 
        return render(request, 'comment/addevent.html', context=context)

template

            <form method="POST" action="/addevent/" class="form mb-2" enctype="multipart/form-data">
              {% csrf_token %}
              {{ context.event_form }}
              <p>testing</p>
            </form>

希望有用
https://b23.tv/d0VOChk