簡體   English   中英

'NoneType' 對象沒有屬性 'strip' - Slugify

[英]'NoneType' object has no attribute 'strip' - Slugify

我的模型在 slugify 線上有問題

from django.db import models
from django.contrib.auth.models import User
from django.template.defaultfilters import slugify

# Create your models here.
class Pages(models.Model):
    title = models.CharField(max_length=255)
    slug = models.SlugField(blank=True)
    content =  models.TextField(blank=True)
    publish_at = models.DateTimeField(auto_now_add=True)
    update_at = models.DateTimeField(auto_now=True)
    order =  models.IntegerField(default=0)
    type_content = models.CharField(max_length=255)
    user = models.ForeignKey(User)  
    status =models.IntegerField(default=1)

    def __str__(self):
        return self.title   


    def save(self,  *args, **kwargs):

        if not self.slug:
            self.slug = slugify(self.title)

        #self.user=self.request.user
        super(Pages, self).save( *args, **kwargs)

我試着把代碼 self.slug = slugify("test of slug") 和問題仍然存在,但是當他說保持信息沒有問題時

這是我的錯誤:

環境:

請求方式:POST 請求地址: http://xxx.xx.xx.xx:8000/admin/pages/pages/add/

Django 版本:1.7.1 Python 版本:3.4.2 已安裝的應用程序:('django.contrib.admin'、'django.contrib.auth'、'django.contrib.contenttypes'、'django.contrib.sessions'、'django .contrib.messages', 'django.contrib.staticfiles', 'seo', 'pages', 'site_options', 'news', 'tags', 'category') 安裝的中間件: ('django.contrib.sessions.middleware .SessionMiddleware'、'django.middleware.common.CommonMiddleware'、'django.middleware.csrf.CsrfViewMiddleware'、'django.contrib.auth.middleware.AuthenticationMiddleware'、'django.contrib.auth.middleware.Session'AuthenticationMiddleware' .contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware')

回溯:get_response 111 中的文件“C:\\cms-rock\\vrockw\\lib\\site-packages\\django\\core\\handlers\\base.py”。 response = wrapper_callback(request, *callback_args, **callback_kwargs) 文件“C: \\cms-rock\\vrockw\\lib\\site-packages\\django\\contrib\\admin\\options.py”在包裝器 584 中。返回 self.admin_site.admin_view(view)(*args, **kwargs) 文件“C:\\cms -rock\\vrockw\\lib\\site-packages\\django\\utils\\decorators.py" in _wrapped_view 105. response = view_func(request, *args, **kwargs) File "C:\\cms-rock\\vrockw\\lib\\site -packages\\django\\views\\decorators\\cache.py" in _wrapped_view_func 52. response = view_func(request, *args, **kwargs) File "C:\\cms-rock\\vrockw\\lib\\site-packages\\django\\contrib \\admin\\sites.py" 在內部 204. return view(request, *args, **kwargs) File "C:\\cms-rock\\vrockw\\lib\\site-packages\\django\\contrib\\admin\\options.py"在 add_view 1454. return self.changeform_view(request, None, form_url, extra_context) File "C:\\cms-rock\\vrockw\\lib\\site-packages\\django\\utils\\decorators.py" in _wrapper 29. return bo und_func(*args, **kwargs) 文件“C:\\cms-rock\\vrockw\\lib\\site-packages\\django\\utils\\decorators.py” in _wrapped_view 105. response = view_func(request, *args, **kwargs ) 文件“C:\\cms-rock\\vrockw\\lib\\site-packages\\django\\utils\\decorators.py”在bound_func 25.返回func。 get (self, type(self))(*args2, **kwargs2) File "C:\\cms-rock\\vrockw\\lib\\site-packages\\django\\db\\transaction.py" in inner 394. return func(* args, **kwargs) 文件 "C:\\cms-rock\\vrockw\\lib\\site-packages\\django\\contrib\\admin\\options.py" in changeform_view 1405. self.save_model(request, new_object, form, not add) save_model 中的文件“C:\\cms-rock\\cms\\pages\\admin.py” 45. obj.save() 文件“C:\\cms-rock\\cms\\pages\\models.py” 37. super(Pages , self).save( *args, **kwargs) 文件 "C:\\cms-rock\\vrockw\\lib\\site-packages\\django\\db\\models\\base.py" in save 591. force_update=force_update, update_fields= update_fields) 文件 "C:\\cms-rock\\vrockw\\lib\\site-packages\\django\\db\\models\\base.py" in save_base 619. updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields ) 文件 "C:\\cms-rock\\vrockw\\lib\\site-packages\\django\\db\\models\\base.py" in _save_table 700. result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)文件“C:\\cms-rock\\vrockw\\lib\\site-packages\\django\\db\\mode ls\\base.py" in _do_insert 733. using=using, raw=raw) 文件 "C:\\cms-rock\\vrockw\\lib\\site-packages\\django\\db\\models\\manager.py" in manager_method 92. return getattr(self.get_queryset(), name)(*args, **kwargs) _insert 921 中的文件“C:\\cms-rock\\vrockw\\lib\\site-packages\\django\\db\\models\\query.py”。返回query.get_compiler(using=using).execute_sql(return_id) 文件“C:\\cms-rock\\vrockw\\lib\\site-packages\\django\\db\\models\\sql\\compiler.py”在execute_sql 920. cursor.execute( sql, params) 文件 "C:\\cms-rock\\vrockw\\lib\\site-packages\\django\\db\\backends\\utils.py" in execute 85. sql = self.db.ops.last_executed_query(self.cursor, sql , params) 文件 "C:\\cms-rock\\vrockw\\lib\\site-packages\\mysql\\connector\\django\\base.py" in last_executed_query 371. return cursor.statement File "C:\\cms-rock\\vrockw\\lib \\site-packages\\mysql\\connector\\django\\base.py" in getattr 147. return getattr(self.cursor, attr) File "C:\\cms-rock\\vrockw\\lib\\site-packages\\mysql\\connector\\cursor .py”在語句 858 中。返回 self._executed.strip()

異常類型:/admin/pages/pages/add/ 處的 AttributeError 異常值:'NoneType' 對象沒有屬性 'strip'

嘗試使用slugify功能從django.utils.text而不是django.template.defaultfilters 來自 django.template.defaultfilters 的 Slugify 是模板過濾器,它應該在模板中使用。

好吧,我遇到了同樣的問題。 這就是我固定的方式。

slugify(self.title).__str__()

Slugify 返回一個“SafeString”並且它沒有任何“strip()”函數。 所以我得到一個“str”並且它有效。

此錯誤意味着創建的模型的title屬性沒有值,您需要確保您的 Page 實例具有 required 屬性,然后再對其標題進行 slugify。

以下代碼是一個很好的解決方法,但您仍然需要知道為什么您的模型在保存時沒有標題。

...
class Pages(models.Model):
    ...
    def save(self,  *args, **kwargs):
        if self.title and not self.slug:
            self.slug = slugify(self.title)
     ...

對您來說,最佳解決方案是使用Django Autoslug庫,這將使您免於為 slug 字段設置值的所有麻煩。

一探究竟:

from autoslug import AutoSlugField

class Pages(Model):
    title = CharField(max_length=255)
    slug =  AutoSlugField(populate_from='title')

您可以使用 django 信號來解決這個問題。 嘗試在 models.py 的末尾添加以下代碼

from django.db.models.signals import pre_save
from django.dispatch import receiver

@receiver(pre_save, sender=Pages)
def pre_save_pages(sender, instance, *args, **kwargs):
    if not instance.u_id:
        instance.slug = slugify(instance.title)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM