Django(Python):Django表单未显示

2024-05-23 14:26:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在学习Python和Django编程。但是,我很难显示一个简单的表单。 根据下面的代码显示的唯一元素是按钮,而不是(按预期)整个表单。我已经检查了代码的缩进,但无法显示表单

型号.py

from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
from django.urls import reverse


class Story (models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    date_posted = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    audio = models.FileField(default='SOME STRING', upload_to='audio_stories')


    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('story-detail', kwargs={'pk': self.pk})

forms.py

from django import forms
from .models import Story


class Story_Creation(forms.ModelForm):
    class Meta:
        model = Story
        fields = ['title','content','audio']

视图.py

from django.shortcuts import render, get_object_or_404, redirect
from django.contrib.auth.models import User
from .models import Story
from .forms import Story_Creation
from django.contrib.auth.mixins import (
    LoginRequiredMixin,
    UserPassesTestMixin
    )
from django.views.generic import (
    ListView, 
    DetailView,
    CreateView,
    UpdateView,
    DeleteView
)

def Create_Audio_Story(request):
    if request.method == 'POST':
        s_form = Story_Creation(request.POST, request.FILES)
        if s_form.is_valid():
            s_form.save()
            return redirect('suyuh-home')
    else:
        s_form = Story_Creation()

    context = {
        's_form': s_form,
                }

    return render (request, 'story/story_form.html', context) 

故事URL.py

from django.urls import path
from .views import (
    StoryListView,
    StoryDetailView,
    StoryCreateView,
    StoryUpdateView,
    StoryDeleteView,
    UserStoryListView
)

from .import views

urlpatterns = [
    path('', StoryListView.as_view(), name='suyuh-home'),
    path('user/<str:username>', UserStoryListView.as_view(), name='user-stories'),
    path('story/<int:pk>/', StoryDetailView.as_view(), name='story-detail'), #pk pimarykey for stories
    path('story/new/', StoryCreateView.as_view(), name='story-create'),
    path('story/<int:pk>/update/', StoryUpdateView.as_view(), name='story-update'),
    path('story/<int:pk>/delete/', StoryDeleteView.as_view(), name='story-delete'),
    path('about/', views.about, name='suyuh-about'),
]

主URL.py

from django.contrib import admin
from django.urls import path, include
from django.contrib.auth import views as auth_views
from users import views as user_views
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('story.url')),
    path('register/', user_views.register, name='register'),
    path('login/', auth_views.LoginView.as_view(template_name='users/login.html'), name='login'),
    path('logout/', auth_views.LogoutView.as_view(template_name='users/logout.html'), name='logout'),
    path('password-reset/', auth_views.PasswordResetView.as_view(template_name='users/password_reset.html'), name='password-reset'),
    path('password-reset-complete/', auth_views.PasswordResetCompleteView.as_view(template_name='users/password_reset_complete.html'), name='password_reset_complete'),
    path('password-reset/done/', auth_views.PasswordResetDoneView.as_view(template_name='users/password_reset_done.html'),name='password_reset_done'),
    path('password-reset-confirm/<uidb64>/<token>/', auth_views.PasswordResetConfirmView.as_view(template_name='users/password_reset_confirm.html'), name='password_reset_confirm'),
    path('profile/', user_views.profile, name='profile'),

]

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

story\u form.html

{% extends "story/base.html" %}
{% load crispy_forms_tags %}
{% block content %}
  <div class="content-section">
        <form method="POST" enctype="multipart/form-data">
            {% csrf_token %}
            <fieldset class="form-group">
                <legend class="border-bottom mb-4">New Story</legend>
                {{ s_form|crispy }}
            </fieldset>
            <div class="form-group">
                <button class="btn btn-outline-info" type="submit">Create Story</button>
            </div>
        </form>

    </div>
{% endblock content %}

我现在看不出我的错误,因此不知道如何继续下去。非常感谢你的支持。我真的很感激每一个暗示

你好


Tags: pathdjangonamefromimportformauthview
2条回答
return render (request, 'story_form.html', context) 

试试那个代码吧

代码中需要更新的几件事:

main/url.py中,更改传递给include方法的参数,因为在我看来,应用程序中的文件story称为urls.py,而不是url.py

path('', include('story.urls'))

story/url.py中,您没有将名为Create_Audio_Story()的视图与任何路径关联。如果希望此视图显示在/story/new,则应按如下方式更新文件:

from . import views

urlpatterns = [
    path('story/new/', views.Create_Audio_Story, name='story-create'),
]

相关问题 更多 >