代码之家  ›  专栏  ›  技术社区  ›  James

Django+trac wiki到html markdown“SafeText”对象没有属性“get”

  •  0
  • James  · 技术社区  · 10 年前

    我正在尝试将trac wiki markdown格式呈现为html,以便在我的网站上显示。我试着跟着这个人 SO question 'how do i use trac wiki formatting' ,但 code snippet 当我运行它时,返回一个错误。应该注意,问题和代码已经接近4年了。你知道我该怎么做吗?

    在我的urls.py中,我只需调用 tracwiki (从代码段)视图。

    #网址.py

    url(r'^$',                       'tracwiki',              name='index'),
    

    #视图.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())
    

    以下是返回的错误:

    [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
    
    1 回复  |  直到 7 年前
        1
  •  4
  •   dannymilsom    10 年前

    问题是您创建了 custom template filter ,但您已将其保存在 views.py 所以django把它当作 view 。这是错误的-您的代码不属于 视图.py 你不需要添加任何内容 urls.py 。详细说明。。。

    使用当前配置,当URLConf(通过 '^$' 您添加的模式),django期望 tracwiki() 函数返回 HttpResponse 对象-因为它认为这是一个视图。

    然而,如果我们看看这个 tracwiki() 函数,您可以看到我们没有返回 HTTP响应 对象通过 render() render_to_response() 等等。相反,我们将返回 SafeText 没有 .get() 属性,与 HTTP响应 对象,因此中间件调用时出现异常 .get() 在我们返回的对象上。

    相反,您需要删除添加到 网址.py ,并在要呈现此标记的适当HTML模板中使用模板过滤器。例如

    {{ some_variable|tracwiki }}
    

    如果您不熟悉模板过滤器, here are some built-in filters being used .

    您还需要移动 tracwiki() 逻辑不符合 视图.py 文件并放入新模块中 templatags 目录在 docs (但请记住,在调用筛选器之前,需要在模板中加载此新模块)

    {% load new_filter_module %}