【问题标题】:Django 1.11: Error during template rendering , __str__ returned non-string (type NoneType)Django 1.11:模板渲染期间出错,__str__ 返回非字符串(NoneType 类型)
【发布时间】:2018-07-15 23:36:32
【问题描述】:

Django 版本:1.11 Python 版本:3.5 我正在尝试遵循 Django 教程,但遇到一个无法解决的问题,我无法删除此错误

异常类型:/posts/new/ 处的 TypeError

异常值:__str__ 返回非字符串(NoneType 类型)

追溯

Environment:


Request Method: GET
Request URL: http://127.0.0.1:8000/posts/new/

Django Version: 1.11
Python Version: 3.6.6
Installed Applications:
   ['django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.humanize',
    'bootstrap3',
    'accounts',
    'groups',
    'posts']

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']

Template error:
In template E:\Private\django_project\social_clone\simplesocial\templates     \base.html, error at line 10
 __str__ returned non-string (type NoneType)   1 : <!DOCTYPE html>
 2 : {% load staticfiles %}
 3 : <html>
 4 :   <head>
 5 :     <meta charset="utf-8">
 6 :     <title>Egy Social</title>
 7 :     <!-- Latest compiled and minified CSS -->
 8 : 
 9 : 
 10 :     <link rel="stylesheet" href="https: //maxcdn.bootstrapcdn.com /bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
 11 : 
 12 : 
 13 :         <!-- Optional theme -->
 14 : 
 15 :     <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">
 16 :         <!-- Latest compiled and minified JavaScript -->
 17 :     <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
 18 :     <link href="https://fonts.googleapis.com/css?family=Montserrat" rel="stylesheet">
 19 :     <link rel="stylesheet" href="{% static 'simplesocial/css/master.css'%}">
 20 :   </head>


 Traceback:

 File "C:\Users\Ahmed-Fathi\Anaconda2\envs\myDjangoEnv\lib\site-packages\django\core\handlers\exception.py" in inner
 41.response = get_response(request)

 File "C:\Users\Ahmed-Fathi\Anaconda2\envs\myDjangoEnv\lib\site-packages\django\core\handlers\base.py" in _get_response
 217.response = self.process_exception_by_middleware(e, request)

 File "C:\Users\Ahmed-Fathi\Anaconda2\envs\myDjangoEnv\lib\site-packages\django\core\handlers\base.py" in _get_response
 215.               response = response.render()

 File "C:\Users\Ahmed-Fathi\Anaconda2\envs\myDjangoEnv\lib\site-packages\django\template\response.py" in render
 107.             
  self.content = self.rendered_content

 File "C:\Users\Ahmed-Fathi\Anaconda2\envs\myDjangoEnv\lib\site-packages\django\template\response.py" in rendered_content
 84.         
 content = template.render(context, self._request)

 File "C:\Users\Ahmed-Fathi\Anaconda2\envs\myDjangoEnv\lib\site-packages\django\template\backends\django.py" in render
 66.            
  return self.template.render(context)

 File "C:\Users\Ahmed-Fathi\Anaconda2\envs\myDjangoEnv\lib\site-packages\django\template\base.py" in render
 207.                 
 return self._render(context)

 File "C:\Users\Ahmed-Fathi\Anaconda2\envs\myDjangoEnv\lib\site-packages\django\template\base.py" in _render
 199.   
  return self.nodelist.render(context)

 File "C:\Users\Ahmed-Fathi\Anaconda2\envs\myDjangoEnv\lib\site-packages\django\template\base.py" in render
  990.          
   bit = node.render_annotated(context)

 File "C:\Users\Ahmed-Fathi\Anaconda2\envs\myDjangoEnv\lib\site-packages\django\template\base.py" in render_annotated
  957.         
 return self.render(context)

 File "C:\Users\Ahmed-Fathi\Anaconda2\envs\myDjangoEnv\lib\site-packages\django\template\loader_tags.py" in render
  177.       
  return compiled_parent._render(context)

 File "C:\Users\Ahmed-Fathi\Anaconda2\envs\myDjangoEnv\lib\site-packages\django\template\base.py" in _render
  199.     
 return self.nodelist.render(context)

 File "C:\Users\Ahmed-Fathi\Anaconda2\envs\myDjangoEnv\lib\site-packages\django\template\base.py" in render
  990.         
    bit = node.render_annotated(context)

 File "C:\Users\Ahmed-Fathi\Anaconda2\envs\myDjangoEnv\lib\site-packages\django\template\base.py" in render_annotated
  957.       
  return self.render(context)

 File "C:\Users\Ahmed-Fathi\Anaconda2\envs\myDjangoEnv\lib\site-packages\django\template\loader_tags.py" in render
   177.       
  return compiled_parent._render(context)

  File "C:\Users\Ahmed-Fathi\Anaconda2\envs\myDjangoEnv\lib\site-packages\django\template\base.py" in _render
   199.      
  return self.nodelist.render(context)

  File "C:\Users\Ahmed-Fathi\Anaconda2\envs\myDjangoEnv\lib\site-packages\django\template\base.py" in render
   990.        
    bit = node.render_annotated(context)

 File "C:\Users\Ahmed-Fathi\Anaconda2\envs\myDjangoEnv\lib\site-packages\django\template\base.py" in render_annotated
   957.        
 return self.render(context)

 File "C:\Users\Ahmed-Fathi\Anaconda2\envs\myDjangoEnv\lib\site-packages\django\template\loader_tags.py" in render
   72.          
   result = block.nodelist.render(context)

 File "C:\Users\Ahmed-Fathi\Anaconda2\envs\myDjangoEnv\lib\site-packages\django\template\base.py" in render
   990.          
   bit = node.render_annotated(context)

 File "C:\Users\Ahmed-Fathi\Anaconda2\envs\myDjangoEnv\lib\site-packages\django\template\base.py" in render_annotated
  957.       
  return self.render(context)

 File "C:\Users\Ahmed-Fathi\Anaconda2\envs\myDjangoEnv\lib\site-packages\django\template\loader_tags.py" in render
  72.         
  result = block.nodelist.render(context)

 File "C:\Users\Ahmed-Fathi\Anaconda2\envs\myDjangoEnv\lib\site-packages\django\template\base.py" in render
  990.         
  bit = node.render_annotated(context)

 File "C:\Users\Ahmed-Fathi\Anaconda2\envs\myDjangoEnv\lib\site-packages\django\template\base.py" in render_annotated
 957.         
 return self.render(context)

 File "C:\Users\Ahmed-Fathi\Anaconda2\envs\myDjangoEnv\lib\site-packages\django\template\library.py" in render
  203.   
  output = self.func(*resolved_args, **resolved_kwargs)

 File "C:\Users\Ahmed-Fathi\Anaconda2\envs\myDjangoEnv\lib\site-packages\bootstrap3\templatetags\bootstrap3.py" in bootstrap_form
  338.  
  return render_form(*args, **kwargs)

 File "C:\Users\Ahmed-Fathi\Anaconda2\envs\myDjangoEnv\lib\site-packages\bootstrap3\forms.py" in render_form
  53.
 return renderer_cls(form, **kwargs).render()

 File "C:\Users\Ahmed-Fathi\Anaconda2\envs\myDjangoEnv\lib\site-packages\bootstrap3\renderers.py" in render
   87.  
   return mark_safe(self._render())

 File "C:\Users\Ahmed-Fathi\Anaconda2\envs\myDjangoEnv\lib\site-packages\bootstrap3\renderers.py" in _render
  230.  
   return self.render_errors(self.error_types) + self.render_fields()

 File "C:\Users\Ahmed-Fathi\Anaconda2\envs\myDjangoEnv\lib\site-packages\bootstrap3\renderers.py" in render_fields
   194.       
      bound_css_class=self.bound_css_class,

 File "C:\Users\Ahmed-Fathi\Anaconda2\envs\myDjangoEnv\lib\site-packages\bootstrap3\forms.py" in render_field
 69.  
 return renderer_cls(field, **kwargs).render()

 File "C:\Users\Ahmed-Fathi\Anaconda2\envs\myDjangoEnv\lib\site-packages\bootstrap3\renderers.py" in render
  87.         return mark_safe(self._render())

 File "C:\Users\Ahmed-Fathi\Anaconda2\envs\myDjangoEnv\lib\site-packages\bootstrap3\renderers.py" in _render
  551.         html = self.field.as_widget(attrs=self.widget.attrs)

 File "C:\Users\Ahmed-Fathi\Anaconda2\envs\myDjangoEnv\lib\site-packages\django\forms\boundfield.py" in as_widget
   120.             **kwargs

 File "C:\Users\Ahmed-Fathi\Anaconda2\envs\myDjangoEnv\lib\site-packages\django\forms\widgets.py" in render
  220.         context = self.get_context(name, value, attrs)

 File "C:\Users\Ahmed-Fathi\Anaconda2\envs\myDjangoEnv\lib\site-packages\django\forms\widgets.py" in get_context
 665.         context = super(Select, self).get_context(name, value, attrs)

 File "C:\Users\Ahmed-Fathi\Anaconda2\envs\myDjangoEnv\lib\site-packages\django\forms\widgets.py" in get_context
  627.         context['widget']['optgroups'] = self.optgroups(name, context['widget']['value'], attrs)

  File "C:\Users\Ahmed-Fathi\Anaconda2\envs\myDjangoEnv\lib\site-packages\django\forms\widgets.py" in optgroups
  574.         for option_value, option_label in chain(self.choices):

  File "C:\Users\Ahmed-Fathi\Anaconda2\envs\myDjangoEnv\lib\site-packages\django\forms\models.py" in __iter__
  1118.             yield self.choice(obj)

  File "C:\Users\Ahmed-Fathi\Anaconda2\envs\myDjangoEnv\lib\site-packages\django\forms\models.py" in choice
  1124.         return (self.field.prepare_value(obj), self.field.label_from_instance(obj))

  File "C:\Users\Ahmed-Fathi\Anaconda2\envs\myDjangoEnv\lib\site-packages\django\forms\models.py" in label_from_instance
  1189.         return force_text(obj)

  File "C:\Users\Ahmed-Fathi\Anaconda2\envs\myDjangoEnv\lib\site-packages\django\utils\encoding.py" in force_text
  76.                     s = six.text_type(s)

 Exception Type: TypeError at /posts/new/
 Exception Value: __str__ returned non-string (type NoneType)

这是我的 models.py 文件

enter code here
from django.conf import settings
from django.core.urlresolvers import reverse
from django.db import models

import misaka

from groups.models import  Group

from django.contrib.auth import get_user_model
User = get_user_model()


class Post(models.Model):
    user = models.ForeignKey(User, related_name="posts")
    created_at = models.DateTimeField(auto_now=True)
    message = models.TextField()
    message_html = models.TextField(editable=False)
    group = models.ForeignKey(Group,  
    related_name="posts",null=True,blank=True)

    def __str__(self):
        return self.message

    def save(self, *args, **kwargs):
        self.message_html = misaka.html(self.message)
        super().save(*args, **kwargs)

    def get_absolute_url(self):
        return reverse(
             "posts:single",
              kwargs={
                 "username": self.user.username,
                 "pk": self.pk
                      }
                    )

    class Meta:
         ordering = ["-created_at"]
         unique_together = ["user", "message"]

这就是我的 urls.py 帖子应用程序

from django.conf.urls import url

from . import views

app_name='posts'

urlpatterns = [
    url(r"^$", views.PostList.as_view(), name="all"),
    url(r"new/$", views.CreatePost.as_view(), name="create"),
    url(r"by/(?P<username>[-\w]+)/$"
           ,views.UserPosts.as_view(),name="for_user"),
    url(r"by/(?P<username>[-\w]+)/(?P<pk>\d+)/$"
            ,views.PostDetail.as_view(),name="single"),
    url(r"delete/(?P<pk>\d+)/$",views.DeletePost.as_view(),name="delete"),
    ]

settings.py

enter code here

import os

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
TEMPLATE_DIR = os.path.join(BASE_DIR,'templates')

SECRET_KEY = '(5qpl&b-b48^jszl@nz02#lgbw%tp(o)_wb!)b&k(j9*kueh@&'

DEBUG = True

ALLOWED_HOSTS = []
INSTALLED_APPS = [
   'django.contrib.admin',
   'django.contrib.auth',
   'django.contrib.contenttypes',
   'django.contrib.sessions',
   'django.contrib.messages',
   'django.contrib.staticfiles',
   'django.contrib.humanize',
   'bootstrap3',
   'accounts',
   'groups',
   'posts',
    ]

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',
      ]

ROOT_URLCONF = 'simplesocial.urls'

TEMPLATES = [
 {
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [TEMPLATE_DIR,],
    'APP_DIRS': True,
    'OPTIONS': {
        'context_processors': [
            'django.template.context_processors.debug',
            'django.template.context_processors.request',
            'django.contrib.auth.context_processors.auth',
            'django.contrib.messages.context_processors.messages',
         ],
      },
    },
 ]

WSGI_APPLICATION = 'simplesocial.wsgi.application'
DATABASES = {
    'default': {
    'ENGINE': 'django.db.backends.sqlite3',
    'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
  }

AUTH_PASSWORD_VALIDATORS = [
  {
    'NAME':
      'django.contrib.auth.password_validation.
        UserAttributeSimilarityValidator',
        },
         {
    'NAME': 'django.contrib.auth.password_validation.
       MinimumLengthValidator',
         },
        {
    'NAME': 'django.contrib.auth.password_validation.
          CommonPasswordValidator',
         },
          {
    'NAME': 'django.contrib.auth.password_validation.
          NumericPasswordValidator',
          },
          ]
enter code here

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True
STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]

LOGIN_REDIRECT_URL = "test"
LOGOUT_REDIRECT_URL = "thanks"

我用谷歌搜索但什么也没找到

【问题讨论】:

  • 为什么你认为错误信息在说谎?
  • 所以self.message 是None,当您的数据库行中该列的值为空时,就会发生这种情况。使用return self.message or ''。
  • 上面写着__str__ returned NoneType,试试return self.message or ''
  • @thatBird 我试过这个并得到同样的错误
  • 你试过了吗,def __str__(self): return str(self.message)

标签: python django django-templates


【解决方案1】:

我知道它有点晚了,但是我在添加新帖子时在做同一个项目时遇到了同样的错误。我发现问题出在 Group 模型中。请检查您的 Group 模型,并将 return 放入 str Group 模型中的函数。

【讨论】:

    猜你喜欢
    • 2019-11-04
    • 1970-01-01
    • 2018-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 2021-11-09
    • 1970-01-01
    相关资源
    最近更新 更多