【问题标题】:Django template 'ascii' codec can't decode byte 0xd8Django模板'ascii'编解码器无法解码字节0xd8
【发布时间】:2014-02-03 15:36:23
【问题描述】:

我是一个模板,我正在尝试将类别链接到列出该类别所有内容的视图:

<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'),

在视图中:

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 %} 标记内的参数发送到视图。

我已经尝试过不同的事情。感谢您解决此问题的提示。


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

【问题讨论】:

    标签: python django templates utf-8


    【解决方案1】:

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

    如果你使用:{% url "news.views.get_category" c %},Python 会从你的模型中调用 __unicode__ 方法,这不是你想要的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-17
      • 2011-06-29
      • 2015-05-10
      • 1970-01-01
      • 1970-01-01
      • 2013-08-20
      • 2014-04-09
      • 2018-08-02
      相关资源
      最近更新 更多