my python bugs

本文探讨了Python文件编码问题及其解决方案,并详细分析了Django中ManyToManyField在视图和模板中使用时遇到的具体问题及解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文件编码问题

file_comments = open("./main.txt","a")
file_comments.write(comment_item)

UnicodeEncodeError: ‘gbk’ codec can’t encode character u’\u200e’ in position 43: illegal multibyte sequence

在windows下面,新文件的默认编码是gbk,这样的话,python解释器会用gbk编码去解析我们的网络数据流txt,然而txt此时已经是decode过的unicode编码,这样的话就会导致解析不了,出现上述问题。 解决的办法就是,改变目标文件的编码

file_comments = open("./main.txt", "a", encoding="utf8")

WIN7下importError:No module named django.core解决方法

用下面的命令,不要用django-admin.py startproject mysite

django-admin.exe  startproject mysite

django数据库ManyToManyField的多选框不显示

---models.py---
class Tag(models.Model):
    tag_name = models.CharField('标签', max_length=256)

    def __str__(self):
        return self.tag_name

    class Meta:
        verbose_name = '标签'
        verbose_name_plural = '标签'
        ordering = ['-tag_name']  # 按照哪个栏目排序

class Article(models.Model):
    tag = models.ManyToManyField(Tag, verbose_name='标签')  # 博客标签 可为空

---admin.py---
class ArticleAdmin(admin.ModelAdmin):
    list_display = ('title', 'date_time', 'author')
    # raw_id_fields = ('tag', )    #去掉这一句就可以了

django数据库invalid literal for int() with base 10

原来的代码如下:

---models.py---
class Tag(models.Model):
    tag_name = models.CharField('标签', max_length=256)

    def __str__(self):
        return self.tag_name # 查询直接把标签名返回,不是Tag对象

class Article(models.Model):
    tag = models.ManyToManyField(Tag, verbose_name='标签')  # 博客标签

---views.py---
def search_tag(request, tag) :
    page = {'layout':'post'}
    try:
        post_list = Article.objects.filter(tag = tag) # 出错的地方
    except Article.DoesNotExist :
        raise Http404
    return render(request, 'tag.html', {'post_list' : post_list, 'site':site, 'page':page})

 ---在html中使用---
{% for tag in post.tag.all %} <!--查询返回Tag对象-->
  <a href="{% url 'search_tag' tag=tag %}">
    {{ tag }}  
  </a>
{% endfor %}

这是因为查询时拿到的是字符串对象,不是int对象,而下面过滤的时候由于某种原因,字符串对象不能直接匹配,转而匹配id,而字符串对象显然不是int对象,故报错。

尝试了一下,把Tag表的数据全部拉出来,然后拿tag匹配来找对应的id,但是,tag是字符串,不是Tag对象。。。
玛德,而且Tag对象里面请求id和tag_name时提示没有这个属性。。。卧槽。。。强行转换成dict,list再获取也是一样,没有这个属性。。

最后是这样解决的:获取数据时把id一同放进字符串名字里,查询时切id那段,使用tag时切tag那段

修改后:

---models.py---
class Tag(models.Model):
    tag_name = models.CharField('标签', max_length=256)

    def __str__(self):
        return str(self.id) + self.tag_name
        # 这里,加入id

class Article(models.Model):
    tag = models.ManyToManyField(Tag, verbose_name='标签')  # 博客标签

---views.py---
def search_tag(request, tag) :
    page = {'layout':'post'}

    try:
        tag_id = tag[0] # 拿到id
        post_list = Article.objects.filter(tag = tag_id) #现在直接按id过滤
    except Article.DoesNotExist :
        raise Http404
    return render(request, 'tag.html', {'post_list' : post_list, 'site':site, 'page':page})

 ---在html中使用---
{% for tag in post.tag.all %}
  <a href="{% url 'search_tag' tag=tag %}">
    {{ tag.tag_name }}  
    <!--这里就有tag_name属性,我也不知道为什么-->
  </a>
{% endfor %}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值