5

リンクを少し短くするためのカスタムテンプレートタグを作成しようとしていますが、以下のコードとエラーを添付しました。Djangoから提供されたドキュメントを調べようとしましたが、間違っていることがわかりません。

テンプレートタグを次のレイアウトに配置しました。

scribbler/
    models.py
    templatetags/
        __init__.py
        shortenlink.py
    views.py

私が書いたカスタムタグファイル:

Shorterlink.py

from django import template
from django.conf import settings
from urllib import urlencode
from urllib2 import urlopen

register = template.Library()

@register.simple_tag
def bitlyshort(the_url):
    endpoint = 'https://api-ssl.bitly.com/v3/shorten?access_token={0}&longUrl={1}&format=txt'
    req = urlencode(endpoint.format(settings.ACCESS_KEY, the_url))
    return urlopen(req).read()

テンプレートタグを使用するテンプレートの一部:

レンプレート

{% load shortenlink %}
<p>{{ bitlyshort "http://www.google.com" }}</p>

エラー

TemplateSyntaxError at /user/sankaetp/
Could not parse the remainder: ' "http://www.google.com"' from 'bitlyshort "http://www.google.com"'
Request Method: GET
Request URL:    http://localhost:8000/user/sankaetp/
Django Version: 1.4.1
Exception Type: TemplateSyntaxError
Exception Value:    
Could not parse the remainder: ' "http://www.google.com"' from 'bitlyshort "http://www.google.com"'
Exception Location: /Users/sankaetp/virtualenvs/myproject/lib/python2.7/site-packages/django/template/base.py in __init__, line 563
Python Executable:  /Users/sankaetp/virtualenvs/myproject/bin/python
Python Version: 2.7.3
Python Path:    
['/Users/sankaetp/virtualenvs/myproject/bin/django_worksquid',
 '/Users/sankaetp/virtualenvs/myproject/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg',
 '/Users/sankaetp/virtualenvs/myproject/lib/python2.7/site-packages/pip-1.1-py2.7.egg',
 '/Users/sankaetp/virtualenvs/myproject/lib/python2.7/site-packages/djangoembed-0.1.1-py2.7.egg',
 '/Users/sankaetp/virtualenvs/myproject/lib/python2.7/site-packages/httplib2-0.7.4-py2.7.egg',
 '/Users/sankaetp/virtualenvs/myproject/lib/python2.7/site-packages/BeautifulSoup-3.2.1-py2.7.egg',
 '/Users/sankaetp/virtualenvs/myproject/lib/python27.zip',
 '/Users/sankaetp/virtualenvs/myproject/lib/python2.7',
 '/Users/sankaetp/virtualenvs/myproject/lib/python2.7/plat-darwin',
 '/Users/sankaetp/virtualenvs/myproject/lib/python2.7/plat-mac',
 '/Users/sankaetp/virtualenvs/myproject/lib/python2.7/plat-mac/lib-scriptpackages',
 '/Users/sankaetp/virtualenvs/myproject/lib/python2.7/lib-tk',
 '/Users/sankaetp/virtualenvs/myproject/lib/python2.7/lib-old',
 '/Users/sankaetp/virtualenvs/myproject/lib/python2.7/lib-dynload',
 '/Users/sankaetp/.pythonbrew/pythons/Python-2.7.3/lib/python2.7',
 '/Users/sankaetp/.pythonbrew/pythons/Python-2.7.3/lib/python2.7/plat-darwin',
 '/Users/sankaetp/.pythonbrew/pythons/Python-2.7.3/lib/python2.7/lib-tk',
 '/Users/sankaetp/.pythonbrew/pythons/Python-2.7.3/lib/python2.7/plat-mac',
 '/Users/sankaetp/.pythonbrew/pythons/Python-2.7.3/lib/python2.7/plat-mac/lib-scriptpackages',
 '/Users/sankaetp/virtualenvs/myproject/lib/python2.7/site-packages',
 '/Users/sankaetp/virtualenvs/myproject/lib/python2.7/site-packages/PIL']
Server time:    Sun, 26 Aug 2012 18:54:26 -0500
4

2 に答える 2

8

エラーは次の行にあります:

<p>{{ bitlyshort "http://www.google.com" }}</p>

テンプレートタグは使用します{% ... %}(テンプレートフィルターは使用します{{ ... }})。試す:

<p>{% bitlyshort "http://www.google.com" %}</p>
于 2012-08-27T00:11:26.480 に答える
0

このエラーを引き起こす別の方法があります:

それ以外の:

{{ data|filter }}

使用する場合:

{{ data | filter }}  <!-- Note Spaces -->

文字の両側のスペースにより、|ページのレンダリング中に例外が発生します。

于 2014-07-30T04:16:23.647 に答える