Django-Render在我的项目中不起作用

Django-Render在我的项目中不起作用,django,forms,render,Django,Forms,Render,我正在处理一周的表格,但无法解决我的问题。也许我忽略了其他人容易发现的事情,但我完全不知道该怎么办。我通过开始构建表单来识别问题。我不得不对表单使用render,每次尝试都失败了。我能够连接数据库并在html页面中显示数据,但每当我使用render而不是render\u to\u response时,它就会失败。据我所知,我必须使用render进行post请求。不仅对于表单,render对所有对象都不起作用。即使对于简单的:def home(request):context={'foo':'ba

我正在处理一周的表格,但无法解决我的问题。也许我忽略了其他人容易发现的事情,但我完全不知道该怎么办。我通过开始构建表单来识别问题。我不得不对表单使用
render
,每次尝试都失败了。我能够连接数据库并在html页面中显示数据,但每当我使用
render
而不是
render\u to\u response
时,它就会失败。据我所知,我必须使用
render
进行post请求。不仅对于表单,
render
对所有对象都不起作用。即使对于简单的:
def home(request):context={'foo':'bar'}返回render(request,'main.html',context)

models.py

class ModuleNames(models.Model):
    ModuleName = models.CharField(max_length = 50)
    ModuleDesc = models.CharField(max_length = 256)
    ModuleSort = models.SmallIntegerField()
    isActive = models.BooleanField()
    ModuleType = models.ForeignKey(ModuleTypes, on_delete=models.CASCADE, null = True)
    slug = models.SlugField(('ModuleName'), max_length=50, blank=True)

class Meta:
    app_label = 'zz'
def __unicode__(self):
    return self.status
forms.py

from django import forms
from MyApp.models import ModuleNames

class ModuleForm(forms.ModelForm):
    moduleName = forms.CharField(label='Module Name', max_length=50)
    ModuleDesc = forms.CharField(max_length = 256)
    ModuleSort = forms.IntegerField()
    isActive = forms.BooleanField()
    ModuleType = forms.IntegerField()

class Meta:
    model = ModuleNames
    fields =('moduleName','ModuleDesc','ModuleSort','isActive','ModuleType')
view.py

from django.views.generic import TemplateView
from django.shortcuts import render,render_to_response, redirect
from django.template import RequestContext
import json
from django.core.serializers.json import Serializer
from django.http import HttpResponse, Http404, HttpResponseRedirect
from urllib.parse import urlparse
from django.urls import resolve 
from django.db import connection
from collections import namedtuple
from django.db.models import F
from django.views.decorators.cache import cache_page
from django.views.decorators.csrf import csrf_protect

from MyApp.models import ModuleNames
from MyApp.forms import ModuleForm

def AddNewModule(request):
    template_name = 'addnewmodule.html'
    if request.method == 'GET':
        form = ModuleForm()
        posts = ModuleNames.objects.all()
        args = {'form': form, 'posts': posts }
        return render(request, template_name, args) #This part is showing data when i use render_to_response. But after clicking Save button on html page, it will give below first error.

    if request.method == 'POST':
        form = ModuleForm(request.POST)
        if form.is_valid():
            form.pop('csrfmiddlewaretoken', None)
            post = form.save(commit=False)
            post.save()
            text = form.cleaned_data['post']
            form = ModuleForm()
            args = {'form': form, 'text': text}
            return render(request, template_name, args)

  • 使用
    render\u to\u response
    禁止(403) CSRF验证失败。请求被中止

    帮助 失败原因: CSRF令牌丢失或不正确

  • 对任何函数使用
    render
    时出错

        Environment:
    Request Method: GET
    Request URL: http://127.0.0.1:8000/addnewmodule
    
    Django Version: 2.1.3
    Python Version: 3.7.1
    Installed Applications:
    ['MyApp',
     'django.contrib.admin',
     'django.contrib.auth',
     'django.contrib.contenttypes',
     'django.contrib.sessions',
     'django.contrib.messages',
     'django.contrib.staticfiles']
    Installed Middleware:
    ['django.middleware.security.SecurityMiddleware',
     'django.contrib.sessions.middleware.SessionMiddleware',
     'django.middleware.common.CommonMiddleware',
     'django.middleware.csrf.CsrfViewMiddleware',
     'django.contrib.auth.middleware.AuthenticationMiddleware',
     'django.contrib.messages.middleware.MessageMiddleware',
     'django.middleware.clickjacking.XFrameOptionsMiddleware']
    
    Traceback:
    
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/core/handlers/exception.py" in inner
    34.response = get_response(request)
    
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/core/handlers/base.py" in _get_response
    126.response = self.process_exception_by_middleware(e, request)
    
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/core/handlers/base.py" in _get_response
    124.response = wrapped_callback(request, *callback_args, **callback_kwargs)
    
    File "/Users/Cem/Documents/Projects/Python/Web/FirstApp/MyApp/views.py" in addnewmodule
    132.return render(request, template_name, args)
    
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/shortcuts.py" in render
    36.content = loader.render_to_string(template_name, context, request, using=using)
    
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/template/loader.py" in render_to_string
    62.return template.render(context, request)
    
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/template/backends/django.py" in render
    61.return self.template.render(context)
    
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/template/base.py" in render
    169.with context.bind_template(self):
    
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/contextlib.py" in __enter__
    112.return next(self.gen)
    
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/template/context.py" in bind_template
    246.updates.update(processor(self.request))
    
    Exception Type: TypeError at /addnewmodule
    Exception Value: 'module' object is not callable
    

  • 阅读django中的内容,它用于站点保护/

    您在
    addnewmodule.html
    表单中缺少
    csrf\u令牌
    ,因此, 您可以返回到
    addnewmodule.html
    表单,在标签
    form action=”“method=“POST”
    下方添加
    {%csrf\u token%}
    ,如下所示

    
    {%csrf_令牌%}
    
    呈现到\u响应
    已过时且已弃用。它将在几个版本后被删除。不要用它。仅使用
    render
    @xyres我知道,但是
    render
    在项目的任何地方都不起作用。您能将此代码放在视图的顶部,并告诉我终端中的输出是什么-
    打印(键入(渲染))
    。您必须向您的视图请求打印内容。为什么要对
    csrf\u令牌使用
    pop
    ?删除
    pop
    方法后重试。这没有帮助。顺便说一句,我从头开始创建了一个新项目,并在新项目中使用了相同的功能,然后一切正常。我不知道我打破了旧项目,但我会比较他们两个,如果不能找到什么是错误的,然后将创建新的项目。