작업중인 사용자 정의 템플릿 태그가 있습니다. 내 장고 관리 인터페이스 사용자가 해당 템플릿 태그를 플랫 페이지에 넣고 올바르게 렌더링되도록하고 싶습니다. 그러나 렌더링 된 플랫 페이지에 액세스하려고하면 500 개의 서버 오류가 발생합니다. 디버그 콘솔은 TemplateSyntaxError: Invalid block tag: 'requesturl'
을 인쇄합니다. 내가 인식하지 못하는 일종의 사용자 정의 템플릿 태그 로딩 우선 순위가 있습니까? 여기 사용자 정의 템플릿 태그 내에서 Django 사용자 정의 템플릿 태그 구문 분석
from django import template
import requests
register = template.Library()
def getrequest(url):
"""
Simple request object
to GET another file
"""
try:
r = requests.get(url)
except requests.exceptions.RequestException as e:
raise IOError(e)
except requests.exceptions.HTTPError as e:
raise IOError(e)
if r.status_code != 200:
raise IOError('Non 200 response returned')
else:
return r.content
@register.tag(name="requesturl")
def do_requesturl(parser, token):
"""
tag usage {% requesturl object.textfield %}
"""
try:
tag_name, uri = token.split_contents();
except ValueError:
raise template.TemplateSyntaxError, "%r tag requires a single URI string argument" % token.contents.split()[0]
if not (uri[0] == uri[-1] and uri[0] in ('"', "'")):
raise template.TemplateSyntaxError("%r tag's URI should be in quotes" % tag_name)
return RequestUrlNode(uri[1:-1])
class RequestUrlNode(template.Node):
def __init__(self, uri):
self.uri = uri
def render(self, context):
try:
pagecontent = getrequest(self.uri)
return pagecontent
except template.VariableDoesNotExist, template.TemplateSyntaxError:
return 'Error rendering', self.uri
내가 (템플릿 자체) URL을 정의 내 장고 템플릿의이 점을 드롭 할 수 있으며이 내용을 얻을 수있는 requests
모듈을 사용 지정된 웹 페이지를 템플릿에 렌더링 :
{% extends "site_layout.html" %}
{% load requesturl %}
{% requesturl "http://textfiles.com/100/914bbs.txt" %}
위대한. 이제 다음 단계는 내 사용자가 장고 아래의 스크린 샷처럼 flatpages.content
필드에 템플릿 태그를 추가하여 응용 프로그램을 flapages 기본에서이 작업을 수행 할 수 있도록하려는 것입니다 :
참고 I 내 특정 플랫 페이지 템플릿을 사용하고 있으며 기본값이 아닌지 확인했습니다.
태그를 평가하려면 this SO answer의 단계를 따르십시오. 내 자신의 커스텀 템플리트 태그를 평가하기 전에 내장 된 장고 템플릿 태그와 필터로 테스트 한 결과, 매력처럼 작동했습니다. 다음은 모두의 예는 장고 내장 템플릿 필터 (lower
)와 태그 (now
)입니다 :
그리고 렌더링하는 방법 :
그러나, 나는하려고 할 때 그리고 내 자신의 사용자 정의 템플릿 태그를 입력, 나는 두려워 TemplateSyntaxError: Invalid block tag: 'requesturl'
얻을. 다음은 내 flatpage 구문 분석 템플릿 태그입니다 :
from django import template
register = template.Library()
@register.tag(name="evaluate")
def do_evaluate(parser, token):
"""
tag usage {% evaluate object.textfield %}
"""
try:
tag_name, variable = token.split_contents()
except ValueError:
raise template.TemplateSyntaxError, "%r tag requires a single argument" % token.contents.split()[0]
return EvaluateNode(variable)
class EvaluateNode(template.Node):
def __init__(self, variable):
self.variable = template.Variable(variable)
def render(self, context):
try:
content = self.variable.resolve(context)
t = template.Template(content)
return t.render(context)
except template.VariableDoesNotExist, template.TemplateSyntaxError:
return 'Error rendering', self.variable
내가 별도로이 두 부분을 할 수있는 이유 손실에 있어요,하지만 난 시도하고 그들을 결합 할 때 나는 오류 얻을 :
File "/path/to/virtualenv/lib/python2.7/site-packages/django/template/base.py", line 332, in invalid_block_tag
raise self.error(token, "Invalid block tag: '%s'" % command)
TemplateSyntaxError: Invalid block tag: 'requesturl'
을 내가 생각할 수있는 유일한 것은 내 사용자 정의 템플릿 태그가 장고에 등록되어 있지 않다는 것입니다. 그러나 이것이 플랫 페이지 템플릿에 직접 포함되어 있다면 왜 작동할까요? 기본 템플릿 태그 레지스트리가 있습니까 아니면 내 EvaluateNode
클래스는 내가 뭘하고 있다고 생각하지 않는거야?
미리 감사드립니다.