Django (Python): Django форма не отображается - PullRequest
0 голосов
/ 08 февраля 2020

Я занимаюсь программированием Python и Django. Тем не менее, я борюсь с отображением простой формы. Единственный элемент, отображаемый на основе приведенного ниже кода, - это кнопка, но не (как предполагалось) вся форма. Я уже проверил отступ моего кода, но не смог отобразить форму.

models.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']

views.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) 

story urls.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'),
]

main urls.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_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 %}

В данный момент я не вижу своей ошибки и поэтому вижу не знаю как продолжить. Спасибо большое за вашу поддержку. Я действительно ценю каждый намек!

Привет!

Ответы [ 2 ]

0 голосов
/ 08 февраля 2020

Несколько вещей, которые будут обновлены в вашем коде:

В main / urls.py измените параметр, переданный методу include, поскольку, как я вижу, вы подаете в приложение story называется urls.py, а не url.py

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

В story / urls.py вы не ассоциируете представление с именем Create_Audio_Story() ни с одним путем. Если вы хотите, чтобы это представление отображалось в / story / new, обновите файл следующим образом:

from . import views

urlpatterns = [
    path('story/new/', views.Create_Audio_Story, name='story-create'),
]
0 голосов
/ 08 февраля 2020
return render (request, 'story_form.html', context) 

Попробуйте этот код вместо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...