include模板中的Django Rest框架表单不会接收数据

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

我在memberform.html模板中显示的“网络”应用程序中有一个空表单。此模板包含在另一个“内容”应用程序的索引模板中。在模板渲染期间,我收到一个“str”对象没有属性“data”错误

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)