【问题标题】:How can I make Django render in the browser?如何让 Django 在浏览器中呈现?
【发布时间】:2020-02-12 21:41:22
【问题描述】:

我正在尝试使用 Django forms.ModelForm 函数。但是,我无法让它在浏览器中呈现(经过 Firefox 和 Chrome 测试)。在代码的浏览器检查中,表格\表单都没有显示,并且根本没有来自 Django 的错误。从 html 文件中唯一显示的是“保存按钮”我在这里缺少什么吗?

在 Models.py 中

from django.db import models


class Product_sell_create(models.Model):
    product_product_sell = models.CharField(max_length=120)
    product_price_sell = models.DecimalField(decimal_places=2, max_digits=500)
    product_volume_sell = models.DecimalField(decimal_places=2, max_digits=500)
    product_location_sell = models.CharField(max_length=120)
    product_description_sell = models.TextField(blank=False, null=False)

Forms.py

from django import forms
from .models import Product_sell_create

class ProductName(forms.ModelForm):
    class Meta:
        model = Product_sell_create
        fields = [
            'product_product_sell',
            'product_volume_sell',
            'product_price_sell',
            'product_location_sell',
            'product_description_sell'
        ]

Views.py

from django.shortcuts import render
from .forms import ProductName


def products_create_view(request):
    form = ProductName(request.POST or None)
    if form.is_valid():
        form.save()
        form = ProductName()

    context = {
        'form': form
    }

    return render(request, "sell.html", context)

sell.html

{% include 'navbar.html' %}
<h1> Upper test</h1>

<form>
    {% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Save" />
</form>

<h1> TEST </h1>

{% block content %}
{% endblock %}

【问题讨论】:

  • 你在使用模板继承吗?有什么改变你把它搞砸了吗?否则,安装 django 调试工具栏以查看正在使用哪些模板以及包含的上下文。 github.com/jazzband/django-debug-toolbar

标签: python html django rendering


【解决方案1】:

只是这样做了,你在发布你的对象时也会遇到问题:

views.py:

from django.shortcuts import render, redirect
from .forms import ProductName
from .models import Product_sell_create

def products_create_view(request):
    if request.method == 'POST':
        form = ProductName(request.POST)
        if form.is_valid():
            prod = form.save(commit=False)
            prod.save()
            return redirect('../thanks')
    else:
        form = ProductName()

        context = {
            'form': form
        }

        return render(request, "form_test.html", context)


def thanks_view(request):
    query = Product_sell_create.objects.all()
    return render (request, 'thanks.html', {'query' : query})

forms.py 和 models.py 保持不变

sell.html:

<h1> Upper test</h1>

<form method="POST">
    {% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Save" />
</form>

<h1> TEST2 </h1>

感谢.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>{{ query }}</h1>
    <h2>THANKS</h2>
</body>
</html>

【讨论】:

  • 感谢您的回答,但遗憾的是问题仍然存在,同样的结果。
  • 再次感谢您的回复,我已经复制了您上面提供的代码,但仍然无法呈现。我创建了 Thanks.html 文件,但是当我在浏览器中打开检查时,{{ query }} 部分也没有显示。似乎我的 PyCharm 根本不会呈现“ {{ }} ”部分,即使它适用于静态和块
  • 谢谢,现在一切正常!我忘记更改views.py,所以我调用了旧的sell_view 函数而不是新的!
  • 我的第一个答案!!差点哭到这里
【解决方案2】:

您是否在应用文件夹的“模板”文件夹中创建了“sell.html”?

MyApp/templates/sell.html

【讨论】:

  • 感谢您的回答。是的,它位于该文件夹中
  • 正如 lucasrf 所说-“返回”必须超出 else 条款。 - form.save() 后面的 form = ProductName() 是不必要的 - 记得在form标签中指定方法和动作
猜你喜欢
  • 1970-01-01
  • 2020-08-02
  • 1970-01-01
  • 1970-01-01
  • 2016-01-14
  • 1970-01-01
  • 2019-06-19
  • 2018-09-04
  • 2018-01-01
相关资源
最近更新 更多