Extending Django Flatpages to accept template tags

2019-02-02 21:57发布

问题:

I use django flatpages for a lot of content on our site, I'd like to extend it to accept django template tags in the content as well.

I found this snippet but after much larking about I couldn't get it to work. Am I correct in assuming that you would need too "subclass" the django flatpages app to get this to work? Is this best way of doing it? I'm not quite sure how to structure it, as I don't really want to directly modify the django distribution.

回答1:

1. A simple page view wich will render template tags by loading a template for each page:

in url.py

url(r'^page/(?P<slug>.*)/$','my_app.views.page_detail', name='page_url'),

in my_app/views.py

def page_detail (request, slug):
    return render_to_response('page/' + slug + '.html', {},
                              context_instance=RequestContext(request))

2. Another method with flat pages stored in database, is to use a "template evaluation tag" in your template like this one.

edit You just have to modify flatpages template like this:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
    "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<head>
<title>{{ flatpage.title }}</title>
</head>
<body>
{% load evaluate_tag %} 
{% evaluate flatpage.content %} 
</body>
</html>


回答2:

An alternative approach could be to write a simple app based on the direct_to_template generic view.