2009-12-05 22 views
0

我的一個模板標籤應該返回一個鏈接列表;大多數元素都從數據庫中取得名稱,除了一個元素之外,我將硬編碼,因爲它永遠不會改變。字符串導致使用utf-8定義的呈現異常

lista_menu = '<ul class="menu">\n\ 
<li><a href="' + reverse('profileloja', args=(s_loja,)) + '">' + \ 
loja.nome.title() + '</a></li>\n<li><a href="' + reverse('index', args=(s_loja,)) + \ 
'">' + 'Página principal' + '</a></li>\n' 

字符串 'Página主體' 導致以下錯誤:( 'ASCII',「P \ XC3 \ xa1gina:在/睾丸中/ painel/

在渲染捕獲的異常

TemplateSyntaxError (128)')

如果我將該字符串定義爲unicode(u'Página...')它工作正常,但我不明白爲什麼。在我定義#之後,django不應該知道如何處理這個問題 - - 編碼:utf-8 - - 在我的代碼頂部?

編輯︰ 如果我定義一個簡單的標籤,返回一個變量與相同的字符串('Página委託人')它工作正常。那麼爲什麼這個案件不同,迫使我將字符串定義爲unicode?

EDIT2:完整的標籤

@register.simple_tag 
def menupainel(s_loja): 
    def listapaginas(paginfo_menu): 
     lista_menu = '' 
     for pagina in paginfo_menu: 
      lista_menu += '<li><a href="' + \ 
       reverse('painel_paginfo', args=(pagina.loja, pagina.id))+ \ 
       '">' + pagina.titulo.title() + '</a></li>\n' 
      lista_menu += '<li class="opcoes_objecto"><a href="' + \ 
          reverse('editpaginfo', args=(pagina.loja, pagina.id)) + \ 
          '">' + pagina.titulo.title() + '</a></li>\n' 
      lista_menu += '<li class="opcoes_objecto"><a href="' + \ 
          reverse('delpaginfo', args=(pagina.loja, pagina.id)) + \ 
          '">' + pagina.titulo.title() +'</a></li>\n' 
      return lista_menu 
    loja = get_object_or_404(Loja, slug=s_loja) 
    menus = loja.menus.all() 
    paginfo_sem_menu = PaginaInfo.objects.filter(loja=loja).\ 
         filter(publico=True).filter(menu=None) 
    lista_menu = '<ul class="menu">\n\ 
<li><a href="' + reverse('profileloja', args=(s_loja,)) + '">' + \ 
loja.nome.title() + '</a></li>\n<li><a href="' + reverse('index', args=(s_loja,)) + \ 
'">' + u'Página principal' + '</a></li>\n'  
    for menu in menus: 
     paginfo_menu = menu.paginasinfo.exclude(slug='index') 
     if paginfo_menu: 
      lista_menu += '<li id="titulo">' + \ 
          menu.nome.title() + '</li>\n' + \ 
          listapaginas(paginfo_menu) 
    if paginfo_sem_menu: 
     lista_menu += listapaginas(paginfo_sem_menu) 
    lista_menu += '</ul>' 
    return lista_menu 
+0

PLS顯示你如何定義的標籤。 – Kugel 2009-12-05 01:20:36

+0

已添加完整標記 – 2009-12-05 18:45:28

回答

1

這是一個Python的事情。普通字符串每字節存儲1個字符。只需使用unicode版本。

編輯:

在Python 3中,普通字符串變成unicode。但django尚未移植到3。

EDIT2:

就在該文件的開頭信息coding: utf-8,只是告訴蟒蛇解析器使用UTF-8編碼的源代碼,而不是默認的ASCII工作。它與字符串的內部表示無關。

+0

如果我定義一個簡單的標記,它返回一個帶有相同字符串('Páginaprincipal')的變量,它可以正常工作。那麼爲什麼這個案件不同,迫使我將字符串定義爲unicode? – 2009-12-05 01:19:50