Не удается получить формы для визуализации в Django - PullRequest
0 голосов
/ 04 апреля 2019

Я работаю над проектом, и я не получаю формы django для рендеринга ни на одной из моих страниц.Я сравнил его с кодом для девушек django, так как обычно обращаюсь к нему, но он выглядит практически идентично.Это не только эта страница, мои другие страницы также имеют проблемы с отображением форм.Вот код:

Views.py

from django.shortcuts import render
from .models import *
from .forms import *
from django.shortcuts import render, get_object_or_404
from django.shortcuts import redirect
from django.contrib.auth.decorators import login_required
from django.contrib.auth import login, authenticate
from django.contrib.auth.forms import UserCreationForm
from django.db.models import Sum
from django.utils import timezone
from django.views.decorators.http import require_POST
from .cart import Cart
from django.db import transaction
from django.contrib import messages


@login_required
def post_edit(request, pk):
    post = get_object_or_404(Post, pk=pk)
    if request.method == "POST":
        form = PostForm(request.POST, instance=post)
        if form.is_valid():
            post = form.save(commit=False)
            post.save()
            return redirect('post_detail', pk=post.pk)
    else:
        form = PostForm(instance=Post)
    return render(request, 'rentadevapp/post_edit.html', {'rentadevapp': post_edit}, {'form': form})

Forms.py

class PostForm(forms.ModelForm):

    class Meta:
        model = Post
        fields = ('title', 'text',)

post_edit.html

{% extends 'rentadevapp/base.html' %}
{% load staticfiles %}
{% load crispy_forms_tags %}
{% block content %}
<head>
    <link rel="stylesheet" href="{% static 'css/post_edit.css' %}">
</head>
<body>
    <div class="container"><br>
        <h2>New Post</h2><br>
        <form method="POST" class="post-form">{% csrf_token %}
            {{ form.as_p }}
            <button type="submit" class="save btn btn-default">Save</button>
        </form>
    </div>
</body>
{% endblock %}

Models.py

class Post(models.Model):
    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    title = models.CharField(max_length=200)
    text = models.TextField()
    created_date = models.DateTimeField(
        default=timezone.now)
    updated_date = models.DateTimeField(auto_now_add=True)
    price = models.DecimalField(max_digits=10, decimal_places=2, default='0')

    class Meta:
        ordering = ('title',)

    def created(self):
        self.created_date = timezone.now()
        self.save()

    def updated(self):
        self.updated_date = timezone.now()
        self.save()

    def publish(self):
        self.published_date = timezone.now()
        self.save()

    def __str__(self):
        return self.title

Я застрял и потратил пару часов, пытаясь понять это.Любая помощь очень ценится.Спасибо!

1 Ответ

3 голосов
/ 04 апреля 2019

Ваша форма не возвращается шаблону в контексте.

В Django 1.11 или 2.2 вызов функции render в вашем представлении должен вернутьсловарь контекстных переменных в качестве третьего аргумента, но у вас есть два словаря.Четвёртый аргумент, где у вас есть словарь, содержащий форму, передается как content_type, который затем используется в HttpResponse, поэтому я весьма удивлен, что не происходит ничего странного или замечена ошибка.

Итак, вы делаете;

return render(request, 'rentadevapp/post_edit.html', {'rentadevapp': post_edit}, {'form': form})

То, что вам нужно сделать, это;

context = {'form': form, 'rentadevapp': post_edit}

return render(request, 'rentadevapp/post_edit.html', context)

До 1.10 render была другая подпись, но первые три аргумента request, template_name, context были такими же, как <1.8 </p>

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