Django url добавление .html

310 просмотра
0
0 Комментариев

Как сделать так чтобы в конце url добавлялось .html?

url(r'^blog/([-\w]+)/([-\w]+)\.html$', "apps.common.views.blog_detail", name="blog_detail"),

Так не работает


Добавить комментарий

2 Answers

Python Опубликовано 09.12.2018
0

Если нужно, чтобы все-все урлы редиректили на .html, добавьте middleware https://docs.djangoproject.com/en/1.8/topics/http/middleware/#process-request и напишите в process_request что-то типа

if not request.path.endswith('.html'):
    return redirect(request.path + '.html')

в urls.py все оставьте как в примере (c .html на конце)

Добавить комментарий
0

При редиректе всех запросов любые готовые приложения откажутся работать.

Проверку на адекватность редиректа все-таки стоит сделать через попытку resolve нового url

project/middleware.py

from django.core.urlresolvers import resolve, Resolver404
from django.shortcuts import redirect
 
class HtmlRedirectMiddleware(object):
 
    def process_request(self, request):
        if not request.path.endswith('.html'):
            new_path = request.path + '.html'
            try:
                resolve(new_path)
            except Resolver404:
                pass
            else:
                return redirect(new_path)

project/settings.py

MIDDLEWARE_CLASSES = (
    'project.middleware.HtmlRedirectMiddleware',
    # ...
)

либо банально по списку regexp, вынесенному в настройки

project/middleware.py

import re
from django.core.urlresolvers import resolve, Resolver404
from django.shortcuts import redirect
from django.conf import settings
 
class HtmlRedirectMiddleware(object):
 
    def process_request(self, request):
        if not request.path.endswith('.html'):
            new_path = request.path + '.html'
            if not any(re.search(regexp, request.path) for regexp in settings.HTML_REDIRECT_EXCLUDE):
                return redirect(new_path)

project/settings.py

MIDDLEWARE_CLASSES = (
    'project.middleware.HtmlRedirectMiddleware',
    # ...
)
HTML_REDIRECT_EXCLUDE = (
    r'^/admin/',
)

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up