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

标签 python django templates utf-8

我是一个模板,我试图将类别链接到列出该类别的所有内容的 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__,而这不是您想要的在这种情况下想要。

关于python - Django 模板 'ascii' 编解码器无法解码字节 0xd8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21531369/

相关文章:

python - api = twitter.Api() AttributeError : 'module' object has no attribute 'Api

python - 如何在没有终端提示的情况下从 IPython session 中复制

Django 静态文件无法在正确配置的开发中使用

mysql - 在 MySQL 和 Django 中使用 Count 连接 2 个表

c++ - 如何使用编译时索引参数迭代参数包的大小

python位置参数和关键字参数

python - 运行时错误: main thread is not in main loop using Matplotlib with Django

c++ - 使用 std::function 解析重载函数:帮助编译器消除歧义

c++ - 如何在容器中指定模板化别名的泛型类型

python - pandas 基于不完全匹配的时间戳进行合并