Skip to main content
 首页 » 编程设计

python之Django 模板 'ascii' 编解码器无法解码字节 0xd8

2024年11月01日19tuyile006

我尝试将类别链接到列出该类别所有内容的 View 的模板:

<div class="categories"> 
tags: 
{% for c in post.categories.all %}</div> 
<ul> 
<a class="category" href="{% url "news.views.get_category" c %}">{{c}}</a>  
</ul> 
{% endfor %} 
</div> 

在 urls.py 中我有:

url(r'^(?P<post_cat>[-\w]+)$', 'news.views.get_category'), 

在 View 中:

def get_category(request, post_cat): 
 
    """News by Category listing.""" 
    posts = News.objects.get(categories=post_cat).order_by("-pub_date") 
    paginator = Paginator(posts, 10) 
 
    try: page = int(request.GET.get("page", '1')) 
    except ValueError: page = 1 
 
    try: 
        posts = paginator.page(page) 
    except (InvalidPage, EmptyPage): 
        posts = paginator.page(paginator.num_pages) 
 
    return render_to_response("news/list-newss_by_category.html", 
                              dict(posts=posts, user=request.user)) 

但是我得到这个错误:

'ascii' codec can't decode byte 0xd8 in position 12: ordinal not in range(128) 

(类别字符串是波斯语)

另一方面,当我使用

<div class="category">{{ c }}</div> 

相反,类别字符串呈现没有问题。

所以问题是如何将类别项作为 {% url %} 标记内的参数发送到 View 。

我一直在尝试不同的事情。感谢您解决此问题的提示。


附言。事实上,我通过在模板标签中使用 c.id 并相应地调整 urls.py 和 views.py 来解决了这个问题。但仍然保留这个问题。希望有人能提出更好的解决方案。

请您参考如下方法:

您应该使用 c.cat_slug,其中 cat_slug 是包含您希望在 URL 中显示的字符串的字段。如 {% url "news.views.get_category"c.cat_slug %}

如果您使用:{% url "news.views.get_category"c %},Python 将从您的模型中调用方法 __unicode__,而这不是您想要的在这种情况下想要。