python - Objeto Django+trac-wiki a html markdown ''SafeText'' no tiene ningún atributo ''get''
django-templates wiki-markup (1)
El problema es que ha creado un filtro de plantilla personalizado , pero lo ha guardado en views.py
, por lo que django lo trata como una vista . Esto es incorrecto: su código no pertenece a views.py
y no necesita agregar nada a urls.py
Elaborar...
Con su configuración actual, cuando URLConf selecciona una solicitud a su raíz del sitio (mediante el patrón ''^$''
que ha agregado), django espera que la función tracwiki()
devuelva un objeto HttpResponse
, porque cree que se trata de un ver.
Sin embargo, si observamos esta función tracwiki()
, puede ver que no devolvemos un objeto HttpResponse
través de render()
o render_to_response()
etc. En su lugar estamos devolviendo un objeto SafeText
que no tiene un .get()
, a diferencia un objeto HttpResponse
, de ahí la excepción cuando el middleware llama a .get()
en el objeto que .get()
.
En su lugar, debe eliminar la línea que agregó a su urls.py
, y usar el filtro de plantilla dentro de la plantilla HTML adecuada en la que desea generar este marcado. Por ejemplo
{{ some_variable|tracwiki }}
Si no está familiarizado con los filtros de plantilla, aquí hay algunos filtros integrados que se utilizan .
También necesita mover la lógica tracwiki()
fuera del archivo views.py
y dentro de un nuevo módulo dentro de un nuevo directorio templatags
. Lea más sobre eso en los documentos (pero recuerde que deberá cargar este nuevo módulo dentro de la plantilla antes de llamar al filtro)
{% load new_filter_module %}
Estoy tratando de renderizar el formato de trac wiki markdown como html para mostrar en mi sitio web. Intenté seguir esta otra pregunta de SO ''¿Cómo uso el formato wiki de trac'' , pero el fragmento de código devuelve un error cuando lo ejecuto. Cabe señalar que la pregunta y el código tienen casi 4 años. ¿Alguna idea de cómo puedo hacer que esto funcione?
En mi urls.py simplemente llamo a la vista tracwiki
(desde el fragmento).
# urls.py
url(r''^$'', ''tracwiki'', name=''index''),
# views.py
"""
Usage:
{% load tracwiki %}
{{ object.body|tracwiki }}
# Logic from http://groups.google.com/group/trac-dev/msg/479decac43883dc0
"""
from trac.test import EnvironmentStub, Mock, MockPerm
from trac.mimeview import Context
from trac.wiki.formatter import HtmlFormatter
from trac.web.href import Href
from django.utils.safestring import mark_safe
from django import template
register = template.Library()
env = EnvironmentStub()
req = Mock(href=Href(''/''), abs_href=Href(''http://www.example.com/''),
authname=''anonymous'', perm=MockPerm(), args={})
context = Context.from_request(req, ''wiki'')
@register.filter
def tracwiki(s):
return mark_safe(HtmlFormatter(env, context, s).generate())
Aquí está el error devuelto:
[01/Apr/2014 18:40:53] "GET / HTTP/1.1" 500 60948
AttributeError at /
''SafeText'' object has no attribute ''get''
Request Method: GET
Request URL: http://xxx.xxx.xxx.xxx/
Django Version: 1.5.5
Exception Type: AttributeError
Exception Value:
''SafeText'' object has no attribute ''get''
Exception Location: /mysite/local/lib/python2.7/site-packages/django/middleware/clickjacking.py in process_response, line 30
Python Executable: /Envs/mysite/bin/python
Python Version: 2.7.5