【问题标题】:MEDIA_URL and redirect not workingMEDIA_URL 和重定向不起作用
【发布时间】:2012-04-10 01:55:20
【问题描述】:

我是 django 的初学者,所以开始了我的测试项目。

有一个 home.html 提供注册或登录/注销的选项。我还创建了一个单独的应用程序registration 来处理这些请求。

settings.py

MEDIA_ROOT = os.path.join(os.path.dirname(__file__), 'media').replace('\\','/')
MEDIA_URL = 'media/'

urls.py

url(r'^$', direct_to_template, {"template": "home.html",}, name="home"),
url(r'^register/', direct_to_template, {"template": "register.html",}, name="register"),
url(r'^accounts', include('registration.urls')),

base.html

<head>
<link rel="stylesheet" href="{{ MEDIA_URL }}style.css" />
</head><body>

<div style="text-align: right;">
    <form action="/accounts/login" method="post">
    {% csrf_token %}
    <p><span>Username:</span><input type="text" name="username" /></p>
    <p><span>Password:</span><input type="password" name="password"/></p>
    <p><input class="submit" type="submit" value="Login" /> </p>
    </form>
    <a href="/accounts/logout">Logout</a>
</div>
<h1>Welcome</h1>
{% if user.is_authenticated %}
<p>Welcome, {{ user.username }}. Thanks for logging in.</p>
{% else %}
<p>Welcome, new user. Please log in.</p>
{% endif %}
{% block content %}
{% endblock %}

home.html

{% extends "base.html" %}
{% block content %}
<p>
    This is a test site. If you do not have an account, <a href="/register">Register</a>
</p>
{% endblock %}

register.html

{% extends "base.html" %}
{% block content %}
<h1> Register </h1> <br />
<form action="/accounts" method="post">
    {% csrf_token %}
    <p><span>Username:</span><input type="text" name="username" /></p><br />
    <p><span>Email:</span><input type="text" name="email" /></p><br />
    <p><span>Password:</span><input type="password" name="password"/></p><br />
    <p><span>Re-password:</span><input type="password" name="repassword"/></p><br />
    <p><input class="submit" type="submit" value="Register" /> </p>
</form>
{% endblock %}

urls.py - 注册

url(r'^media/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.MEDIA_ROOT}),
url(r'^$', registerfun),
url(r'/login$', loginfun),
url(r'/logout$', logoutfun),

views.py - 注册

def registerfun(request):
    #validate and obtain request parameters
    if not errors:
        user = User.objects.create_user(username, email, password)
        user.save()
    return render_to_response('home.html',{'errors':errors}, context_instance=RequestContext(request))

def loginfun(request):
    #obtaion request parameters
user = authenticate(username=username, password=password)
if user is not None:
    if user.is_active:
        login(request, user)
        return render_to_response('home.html')
        else:
        errors.append('Account disabled')
        return render_to_response('home.html',{'errors':errors}, context_instance=RequestContext(request))
    else:
        errors.append('Invalid username/password')
        return render_to_response('home.html',{'errors':errors}, context_instance=RequestContext(request))

我面临两个问题

  • css 未加载。它在media/style.css 下。
  • 登录和注销时,URL 从 /accounts/login 变为 /accounts/logout。我该如何避免它并使其保持在根?此外,当我在http://localhost:8000/accounts/logout 页面上尝试登录时,它给了我CSRF verification failed. Request aborted. 错误

【问题讨论】:

    标签: python django redirect media-url


    【解决方案1】:

    你如何包含你的CSS?应该是:

    {{ MEDIA_URL }}path/to/css.css
    

    在你的情况下:

    {{ MEDIA_URL }}style.css
    

    注销应该是

    def logout(request):
        auth.logout(request)
        return HttpResponseRedirect(reverse('home')) #whatever url you'd like
    

    【讨论】:

    • 我已经像上面那样设置了 MEDIA_URL 但它没有加载。 HttpResponseRedirect 可以解决问题。谢谢。
    • 你应该检查如何处理 MEDIA_URL...我总是这样设置:MEDIA_URL = '../media' 将图像保存在根目录外
    【解决方案2】:

    如果你使用django testserver,你应该使用serve static view,见:

    https://docs.djangoproject.com/en/1.2/howto/static-files/#limiting-use-to-debug-true

    CSRF 问题

    1. 将 {% csrf_token %} 标签 inside 每个 POST 表单каждой POST 表单
    2. 将 'django.middleware.csrf.CsrfViewMiddleware' 放入 settings.py 中的 MIDDLEWARE_CLASSES

    【讨论】:

      猜你喜欢
      • 2016-07-30
      • 1970-01-01
      • 2014-09-29
      • 2017-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-06
      相关资源
      最近更新 更多