我一直在尝试编写一个自定义模板标签来简单地缩短链接,我附上了代码和错误,我一直在下面。我试着查看Django提供的文档,但看不出我做错了什么。
我已将模板标签放在以下布局中:
scribbler/
models.py
templatetags/
__init__.py
shortenlink.py
views.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
答案 0 :(得分:7)
错误在这一行:
<p>{{ bitlyshort "http://www.google.com" }}</p>
模板标记使用{% ... %}
(模板过滤器使用{{ ... }}
)。尝试:
<p>{% bitlyshort "http://www.google.com" %}</p>
答案 1 :(得分:0)
而不是:
{{ data|filter }}
如果您使用:
{{ data | filter }} <!-- Note Spaces -->
|
字符两侧的空格将在页面渲染过程中导致异常。