文件编码问题
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 %}