include模板中的Django Rest框架表单不会接收数据
我在memberform.html模板中显示的“网络”应用程序中有一个空表单。此模板包含在另一个“内容”应用程序的索引模板中。在模板渲染期间,我收到一个“str”对象没有属性“data”错误include模板中的Django Rest框架表单不会接收数据,django,django-rest-framework,django-templates,Django,Django Rest Framework,Django Templates,我在memberform.html模板中显示的“网络”应用程序中有一个空表单。此模板包含在另一个“内容”应用程序的索引模板中。在模板渲染期间,我收到一个“str”对象没有属性“data”错误 Traceback (most recent call last): File "/Users/ml/.virtualenvs/newproject/lib/python3.7/site-packages/django/core/handlers/exception.py", lin
Traceback (most recent call last):
File "/Users/ml/.virtualenvs/newproject/lib/python3.7/site-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "/Users/ml/.virtualenvs/newproject/lib/python3.7/site-packages/django/core/handlers/base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/Users/ml/.virtualenvs/newproject/lib/python3.7/site-packages/django/core/handlers/base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/ml/PycharmProjects/newproject/content/views.py", line 21, in index
return render(request, 'index.html', context)
File "/Users/ml/.virtualenvs/newproject/lib/python3.7/site-packages/django/shortcuts.py", line 36, in render
content = loader.render_to_string(template_name, context, request, using=using)
File "/Users/ml/.virtualenvs/newproject/lib/python3.7/site-packages/django/template/loader.py", line 62, in render_to_string
return template.render(context, request)
File "/Users/ml/.virtualenvs/newproject/lib/python3.7/site-packages/django/template/backends/django.py", line 61, in render
return self.template.render(context)
File "/Users/ml/.virtualenvs/newproject/lib/python3.7/site-packages/django/template/base.py", line 171, in render
return self._render(context)
File "/Users/ml/.virtualenvs/newproject/lib/python3.7/site-packages/django/template/base.py", line 163, in _render
return self.nodelist.render(context)
File "/Users/ml/.virtualenvs/newproject/lib/python3.7/site-packages/django/template/base.py", line 937, in render
bit = node.render_annotated(context)
File "/Users/ml/.virtualenvs/newproject/lib/python3.7/site-packages/django/template/base.py", line 904, in render_annotated
return self.render(context)
File "/Users/ml/.virtualenvs/newproject/lib/python3.7/site-packages/django/template/loader_tags.py", line 150, in render
return compiled_parent._render(context)
File "/Users/ml/.virtualenvs/newproject/lib/python3.7/site-packages/django/template/base.py", line 163, in _render
return self.nodelist.render(context)
File "/Users/ml/.virtualenvs/newproject/lib/python3.7/site-packages/django/template/base.py", line 937, in render
bit = node.render_annotated(context)
File "/Users/ml/.virtualenvs/newproject/lib/python3.7/site-packages/django/template/base.py", line 904, in render_annotated
return self.render(context)
File "/Users/ml/.virtualenvs/newproject/lib/python3.7/site-packages/django/template/loader_tags.py", line 62, in render
result = block.nodelist.render(context)
File "/Users/ml/.virtualenvs/newproject/lib/python3.7/site-packages/django/template/base.py", line 937, in render
bit = node.render_annotated(context)
File "/Users/ml/.virtualenvs/newproject/lib/python3.7/site-packages/django/template/base.py", line 904, in render_annotated
return self.render(context)
File "/Users/ml/.virtualenvs/newproject/lib/python3.7/site-packages/django/template/loader_tags.py", line 188, in render
return template.render(context)
File "/Users/ml/.virtualenvs/newproject/lib/python3.7/site-packages/django/template/base.py", line 173, in render
return self._render(context)
File "/Users/ml/.virtualenvs/newproject/lib/python3.7/site-packages/django/template/base.py", line 163, in _render
return self.nodelist.render(context)
File "/Users/ml/.virtualenvs/newproject/lib/python3.7/site-packages/django/template/base.py", line 937, in render
bit = node.render_annotated(context)
File "/Users/ml/.virtualenvs/newproject/lib/python3.7/site-packages/django/template/base.py", line 904, in render_annotated
return self.render(context)
File "/Users/ml/.virtualenvs/newproject/lib/python3.7/site-packages/django/template/library.py", line 192, in render
output = self.func(*resolved_args, **resolved_kwargs)
File "/Users/ml/.virtualenvs/newproject/lib/python3.7/site-packages/rest_framework/templatetags/rest_framework.py", line 81, in render_form
return renderer.render(serializer.data, None, {'style': style})
AttributeError: 'str' object has no attribute 'data'
main url.py
from django.contrib import admin
from django.urls import path, include
from content.views import(
index,
)
urlpatterns = [
path('admin/', admin.site.urls),
path('', index, name='index'),
path('', include('network.urls')),
]
网络/url.py
from django.urls import path
from . import views
app_name = 'network'
urlpatterns = [
path('', views.MemberForm.as_view(), name='memberform'),
]
网络/视图.py
from django.shortcuts import render, redirect
from network.models import Member
from network.serializers import MemberSerializer
from rest_framework.renderers import TemplateHTMLRenderer
from rest_framework.response import Response
from rest_framework.views import APIView
class MemberForm(APIView):
renderer_classes = [TemplateHTMLRenderer]
template_name = 'memberform.html'
def get(self, request):
serializer = MemberSerializer()
return Response({'serializer': serializer})
def post(self, request):
serializer = MemberSerializer(data=request.POST)
if not serializer.is_valid():
return Response({'serializer': serializer})
serializer.save()
return redirect('memberform')
网络/模型.py
from django.db import models
from django.utils.translation import gettext_lazy as _
# Create your models here.
class Member(models.Model):
name = models.CharField(max_length=50)
shortbio = models.TextField()
country = models.CharField(max_length=50)
city = models.CharField(max_length=50)
contactmail = models.EmailField(max_length=254)
phonenumber = models.CharField(max_length=50)
skills = models.CharField(max_length=50)
otherskills = models.CharField(max_length=50)
ongoingskills = models.CharField(max_length=50)
cv = models.FileField()
portfolio = models.FileField()
web = models.URLField()
socialmedias = models.URLField()
网络/序列化程序.py
from rest_framework import serializers
from .models import Member
class MemberSerializer(serializers.ModelSerializer):
class Meta:
model = Member
fields = ('name', 'shortbio', 'country', 'city', 'contactmail', 'phonenumber', 'skills', 'otherskills', 'ongoingskills', 'cv', 'portfolio', 'web', 'socialmedias')
网络/templates/memberform.html
{% load rest_framework %}
<form action="{% url 'network:memberform' %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
{% render_form serializer %}
<button type="submit" class="btn btn-default">Sign in</button>
</form>
content/templates/base.html
<!DOCTYPE html>
<html>
{# Make modifiable head elements #}
<head>
<title>{% block title %}Home {% endblock title %} | My site</title>
{% block head_favicon %}
<link rel="icon" type="image/png"
href="{{ STATIC_URL }}images/favicon.ico">
{% endblock head_favicon %}
{% block head_meta %}
{% block head_meta_charset %}
<meta http-equiv="Content-Type"
content="text/html; charset=utf-8" />
{% endblock head_meta_charset %}
{% block head_meta_contentlanguage %}
<meta http-equiv="Content-Language" value="en-US" />
{% endblock head_meta_contentlanguage %}
{% block head_meta_viewport %}
<meta name="viewport"
content="width=device-width, initial-scale=1.0">
{% endblock head_meta_viewport %}
{% endblock head_meta %}
{% block head_css %}
{% block head_css_site %}
<link href="{{ STATIC_URL }}css/bootstrap.min.css"
rel="stylesheet" media="screen">
<link href="{{ STATIC_URL }}css/app.css"
rel="stylesheet" media="screen">
{% endblock head_css_site %}
{% block head_css_section %}{% endblock head_css_section %}
{% block head_css_page %}{% endblock head_css_page %}
{% endblock head_css %}
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
</head>
<body>
{# Navigation Menu #}
<header>
<div class="navbar navbar-default navbar-static-top
{% block nav-style %}{% endblock %}">
<div class="container p-none">
<div class="navbar-header">
<button type="button" class="navbar-toggle"
data-toggle="collapse"
data-target=".navbar-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="/">My site</a>
</div>
<div class="collapse navbar-collapse">
<ul class="nav navbar-nav navbar-right">
{% if user.is_authenticated %}
<li><a href="">Logout</a></li>
<li><a href=""
class="p-r-none">Accounts</a></li>
{% else %}
<li><a href="">Login</a></li>
<li><a href="" class="p-r-none">Sign Up</a></li>
{% endif %}
</ul>
</div>
</div>
</div>
</header>
{# The Document Body #}
<div id="site-wrapper">
{% block content %}
{% endblock %}
</div>
{# The Footer #}
<div class="footer">
<div class="container">
<p></p>
</div>
</div>
</body>
您可以执行以下操作,而不是使用detail函数获取about、how和generate的值:
about = Post.objects.get(pk=1)
how = Post.objects.get(pk=2)
donate = Post.objects.get(pk=3)
这可能会根据您试图对detail函数执行的操作而起作用。是否可以显示更多的views.py和index.html,因为它说您的错误在返回render(request,indext.html,context)中。我现在将尝试查找此错误此部分实际上工作正常,直到添加{%include'memberform.html%}在模板中。我认为问题更多的是表单视图或序列化程序本身。在主页上,从这个表单(使用memberform.html)显示,我还显示了3个不同的帖子(使用detail.html)。另外,如果我使用urlpatterns={path(“”,memberform.as_view(),name='memberform'),}直接从主应用程序调用表单,表单显示得很好我搞不懂为什么你有两个content/templates/index.html我错了,它实际上是base.html,我在我的帖子中更改了它
from django.shortcuts import render, redirect
from django.template.loader import render_to_string
from content.models import Post
def detail(pk):
post = Post.objects.get(pk=pk)
context = {
'post': post,
}
return render_to_string('detail.html', context)
def index(request):
about = detail(pk=1)
how = detail(pk=2)
donate = detail(pk=3)
context = {
'about': about,
'how': how,
'donate': donate,
}
return render(request, 'index.html', context)
about = Post.objects.get(pk=1)
how = Post.objects.get(pk=2)
donate = Post.objects.get(pk=3)