为什么Django会在以“.htm”结尾的url后自动添加斜杠,而当url以“.html”结尾时则不会?

时间:2010-05-01 11:13:36

标签: django

我有一个问题,Django会自动为以“.htm”结尾的网址添加斜杠

Url喜欢: http://127.0.0.1:8080/js/tiny_mce/themes/advanced/link.htm 变为: http://127.0.0.1:8080/js/tiny_mce/themes/advanced/link.htm/

但如果我将“link.htm”重命名为“link.html”,则不会出现问题。

问题可能在哪里?

感谢。

urls.py:

from django.conf.urls.defaults import *
from dtunes.views import *
from django.conf import settings
from django.contrib import admin

admin.autodiscover()

urlpatterns = patterns('',

    url(r'^$', home, name='home'),

     url(r'^(?P<path>.*\.(htm|html|jpg|jpeg|css|gif|js|png))$', "django.views.static.serve", {
            "document_root": settings.MEDIA_ROOT,
        }, name="media"),

    url(r'^img/tr.gif', track, name='track'),
    (r'^admin/', include(admin.site.urls)),
    url(r'^smscoin/ipn/', ipn, name='smscoin_ipn'),
    url(r'^download-link/', get_download_link, name='get_download_link'),
    url(r'^get/(?P<name>.*)/$', item_details, name="item_details"),
    url(r'^getnow', item_details_paid, name="item_details_paid"),
    url(r'^download/(?P<name>.*)/$', send_direct_file, name="send_direct_file"),
    url(r'^(?P<name>.*)/$', plain_page, name="plain_page"),       

)

1 个答案:

答案 0 :(得分:2)

Django has a setting, "APPEND_SLASH",它为在URLConf中没有匹配的URL添加斜杠,但如果添加斜杠则匹配。所以你的urls.py中可能有一些匹配“.htm /".

的正则表达式模式

看起来你正在使用Django serve static files?如果是这样,您可以确保正确配置。在开发期间,为了保持DRY,我通常在我的“urls.py”文件中使用以下内容来提供静态媒体。这需要在settings.py中正确配置MEDIA_ROOTMEDIA_URL

# urls.py
from django.conf import settings

urlpatterns = patterns(
   ...
)

if settings.DEBUG:
    urlpatterns += patterns('',
            (r'^%s/(?P<path>.*)$' % settings.MEDIA_URL[1:-1],
                'django.views.static.serve',
                {'document_root': settings.MEDIA_ROOT}),
    )