Django urls straight to html template

后端 未结 5 1942
我在风中等你
我在风中等你 2021-02-01 01:58

Learning django & python.

Just set up a new site after doing the tutorial. Now for arguments sake say I want to add a bunch of About us, FAQ basic html pages with ve

相关标签:
5条回答
  • 2021-02-01 02:34

    If you're using the class based views because direct_to_template has been deprecated, you can create a simple wrapper that renders your own templates directly:

    from django.views.generic import TemplateView
    from django.template import TemplateDoesNotExist
    from django.http import Http404
    
    class StaticView(TemplateView):
        def get(self, request, page, *args, **kwargs):
            self.template_name = page
            response = super(StaticView, self).get(request, *args, **kwargs)
            try:
                return response.render()
            except TemplateDoesNotExist:
                raise Http404()
    

    and in your router:

    from myapp.static.views import StaticView
    
    urlpatterns = patterns('',
        url(r'^(?P<page>.+\.html)$', StaticView.as_view()),
        # ...
    )
    
    0 讨论(0)
  • 2021-02-01 02:38

    One way to do this would be to write a single custom view that wraps the direct_to_template generic view. The wrapper could accept a parameter and accordingly form the name of the template and pass it to direct_to_template. This way you can route multiple pages with a single URL configuration.

    Something like this:

    url(r'^foo/(?P<page_name>\w+).html$', 'my_static_wrapper', name = 'my_static_wrapper'),
    
    def my_static_wrapper(request, page_name):
        # form template name and call direct_to_template
    

    That said I suspect that there are better solutions out there though.

    0 讨论(0)
  • 2021-02-01 02:47

    Currently the best way to do this is using TemplateView from generic class-based views:

    from django.views.generic.base import TemplateView
    
    url(r'^$', TemplateView.as_view(template_name='index.html'), name='home'),
    
    0 讨论(0)
  • 2021-02-01 02:55

    Write a url which grabs the static pages you're interested in

    url(r'^(?P<page_name>about|faq|press|whatever)/$', 'myapp.staticpage', name='static-pages')
    

    The staticpage view function in myapp

    from django.views.generic.simple import direct_to_template
    from django.http import Http404
    
    def staticpage(request, page_name):
        # Use some exception handling, just to be safe
        try:
            return direct_to_template(request, '%s.html' % (page_name, ))
        except TemplateDoesNotExist:
            raise Http404
    

    Of course, you need to follow a naming convention for your templates, but this pattern can be expanded upon as needed.

    This is better than the .+\.html pattern because it will treat templates which don't exist as 404s, whereas .+\.html will blow up with 500 errors if the template doesn't exist.

    0 讨论(0)
  • 2021-02-01 02:57

    As long as there is some uniquely identifying section in the URL, you will not need to create an entry in urls.py for each direct-template url.

    For example, you could say that all urls ending in ".html" are referencing a direct file from the templates.

    urlpatterns = patterns('django.views.generic.simple',
        (r'(.+\.html)$', 'direct_to_template'),
        # ...
    )
    

    Take a look at http://docs.djangoproject.com/en/1.2/ref/generic-views/#django-views-generic-simple-direct-to-template for details.

    0 讨论(0)
提交回复
热议问题