【问题标题】:Django doesn't match pattern as expected and appends slash w/ redirectDjango 与预期的模式不匹配,并在重定向时附加斜线
【发布时间】:2013-02-16 07:49:00
【问题描述】:

我的 Django 站点与 urls.py 中的模式不匹配:

url(r'label/(?P<name_value>.*)$', 'name.views.label', name='label'),

当我在

处请求网址时
http://<site>/name/label/foo

...不是转到视图“标签”,而是 302 重定向并附加尾部斜杠。

注意:这仅在我将站点移动到我们的测试环境时才有效。当我使用 Django 的内置迷你服务器(manage.py runserver)执行此操作时,它不会附加斜杠,而是完全按照我的意图进入“标签”视图。

在测试环境中,我们使用的是 Django 1.3 和 Apache 2.2.8

这里是 /etc/apache2/sites-available/default:

<VirtualHost *:80>
    ServerName ******************
    ServerAdmin ******************
    ErrorLog /var/log/apache2/error.log
    LogLevel warn

    CustomLog /var/log/apache2/access.log combined
    ServerSignature On

    Alias /media /home/media
    <Location /media>
        SetHandler None
    </Location>

    <Directory /home/media>
        Options +FollowSymLinks
    </Directory>

    SetHandler python-program
    PythonHandler django.core.handlers.modpython
    PythonDebug On
    SetEnv DJANGO_SETTINGS_MODULE site.settings
    PythonPath "['/home/code', '/home/code/site'] + sys.path"
</VirtualHost>

有人知道我哪里出错了吗?

【问题讨论】:

  • 你确定 Apache 没有为你做重定向吗?验证 Django 是否正在接收请求!
  • Django 正在接收请求。我发现如果我在 settings.py 中注释掉平面页面,它会按预期运行。

标签: django apache redirect django-views


【解决方案1】:

According to the Django docs,您应该将以下内容放入您的 Django 设置文件中:

APPEND_SLASH = False

【讨论】:

  • 所以,澄清一下:我希望 APPEND_SLASH 为真。问题不在于附加了斜线。问题是在我的测试服务器上,模式与 urls.py 不匹配
【解决方案2】:

试试这个:

url(r'label/(?P<name_value>[\w_-]+)$', 'name.views.label', name='label'),

【讨论】:

  • 没用 - 仍然被重定向,尽管我同意将正则表达式从“一切”缩小一点是个好主意。另外,我相信你有一个额外的右括号
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-30
  • 1970-01-01
相关资源
最近更新 更多