首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让Django/Wagtail解析这个url

如何让Django/Wagtail解析这个url
EN

Stack Overflow用户
提问于 2020-04-05 15:03:28
回答 1查看 297关注 0票数 0

我想问这个问题,因为我确信答案很简单。尽管如此,我已经花了几个小时研究和测试可能的解决方案,我一直没有头发。

在和谐项目中,我编写了自己的登录页面,它驻留在一个名为users的应用程序中。

我有另一个叫your_harmony的应用程序。要超越your_harmony页面,用户需要登录。

your_harmony.html

代码语言:javascript
复制
    {% if user.is_authenticated %}
        <h1>{{ self.sub_title|richtext }}</h1>
        You are logged in as: {{ user.username }} &nbsp
                <a href="/users/logout">Click here to logout</a>
        ...
    {% else %}
         You must login to access this page. <a href="/users/login">Click here to login</a>
    {% endif %}

harmony.urls

代码语言:javascript
复制
urlpatterns = [
   ...
    url(r'your-harmony/', include('your_harmony.urls')),
    url(r'^users/', include('users.urls')),
   ...

your_harmony.urls

代码语言:javascript
复制
urlpatterns = [
    path('', views.your_harmony, name='your_harmony')
]

url / uses / login使用uses/views.py显示登录表单

views.py

代码语言:javascript
复制
RETURN_FROM_LOGIN_URL = 'your-harmony'
RETURN_FROM_LOGIN_URL = 'your_harmony/your_harmony.html'

def login_view(request):
    form_context = {'login_form': LoginForm,}
    url = "users/login.html"
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(username=username, password=password)
        if user is not None:
            if user.is_active:
                login(request, user)
                url = RETURN_FROM_LOGIN_URL
            else:
                messages.error(request, 'Your account is not enabled!')
            context = {}
        else:
            messages.error(request, 'Your username or password was not recognized!')
            context = form_context
    else:
        context = form_context
    return render(request, url, context)

如果我回到“你的和谐”那就错了

TemplateDoesNotExist /users/登录/ 你的和谐

如果我返回到‘your/YOYHHONY.html’,我会得到页面,但没有上下文。

我该怎么处理呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-12 09:51:45

按照@gasman的建议,我重新阅读了Django教程。正如教程第4部分所说:

在成功处理POST数据之后,应该始终返回一个HttpResponseRedirect。本技巧不是专门针对Django的;它通常是良好的Web开发实践

因此,我更改了代码以包含此返回,并将模板路径替换为URL conf。

views.py

代码语言:javascript
复制
RETURN_FROM_LOGIN_URL = 'your_harmony'

def login_view(request):
    form_context = {'login_form': LoginForm,}
    url = "users/login.html"
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(username=username, password=password)
        if user is not None:
            if user.is_active:
                login(request, user)
                return HttpResponseRedirect(reverse(RETURN_FROM_LOGIN_URL))
            else:
                messages.error(request, 'Your account is not enabled!')
            context = {}
        else:
            messages.error(request, 'Your username or password was not recognized!')
            context = form_context
    else:
        context = form_context
    return render(request, url, context)

学到了很多,值得付出努力

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61044640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档