【问题标题】:Django searches for a template in an unspecified locationDjango 在未指定位置搜索模板
【发布时间】:2017-07-05 09:36:35
【问题描述】:

base.html

<a href="/login">Log In</a>

在主urls.py

from ...
from accounts.views import login_view, logout_view, register_view
urlpatterns = [
    ...
    url(r'^login/', login_view),
    ....
]

在账户views.py,

def login_view (request):
    request.session.set_expiry(request.session.get_expiry_age())
    form = UserLoginForm(request.POST or None)
    title = "Login"
    if form.is_valid() : 
        username = form.cleaned_data.get("username")
        password = form.cleaned_data.get("password")
        user = authenticate(username=username, password=password)
        login(request,user)
        return HttpResponseRedirect('/')

    return render(request, 'accounts/login_form.html',{ "form" : form, "title": title})

点击Log In时,login_form模板在'registration/login.html'而不是'accounts/login_form.html'中搜索。

Django tried loading these templates, in this order:

Using engine django:
django.template.loaders.app_directories.Loader: /Users/***/Desktop/django/mysite/personal/templates/registration/login.html (Source does not exist)
django.template.loaders.app_directories.Loader: /Users/***/Desktop/django/mysite/blog/templates/registration/login.html (Source does not exist)
django.template.loaders.app_directories.Loader: /Users/***/Desktop/django/mysite/landing/templates/registration/login.html (Source does not exist)
django.template.loaders.app_directories.Loader: /Users/***/Desktop/django/mysite/accounts/templates/registration/login.html (Source does not exist)
django.template.loaders.app_directories.Loader: /Library/Python/2.7/site-packages/crispy_forms/templates/registration/login.html (Source does not exist)
django.template.loaders.app_directories.Loader: /Library/Python/2.7/site-packages/pagedown/templates/registration/login.html (Source does not exist)
django.template.loaders.app_directories.Loader: /Library/Python/2.7/site-packages/markdown_deux/templates/registration/login.html (Source does not exist)
django.template.loaders.app_directories.Loader: /Library/Python/2.7/site-packages/tracking/templates/registration/login.html (Source does not exist)
django.template.loaders.app_directories.Loader: /Library/Python/2.7/site-packages/django/contrib/admin/templates/registration/login.html (Source does not exist)
django.template.loaders.app_directories.Loader: /Library/Python/2.7/site-packages/django/contrib/auth/templates/registration/login.html (Source does not exist)

在我尝试覆盖 registration/password_reset_form.htmlregistration/password_reset_done.htmlregistration/password_reset_confirm.htmlregistration/password_reset_complete.html实现密码重置功能。

主要的urls.py已包含,

url(r'^user/password/reset/$','django.contrib.auth.views.password_reset',{'post_reset_redirect' : '/user/password/reset/done/'},name="password_reset"),
url(r'^user/password/reset/done/$','django.contrib.auth.views.password_reset_done'),
url(r'^user/password/reset/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+)/$','django.contrib.auth.views.password_reset_confirm',{'post_reset_redirect' : '/user/password/done/'}),
url(r'^user/password/done/$','django.contrib.auth.views.password_reset_complete'),

有什么建议吗?谢谢 !

编辑 :仅当/login/logout/register 不用作url 路径时,才会在正确的位置搜索模板。我尝试使用/user_login/user_logout/user_register,并且成功了。我认为这与urls.py 的内置登录相冲突。如何纠正这个问题?

【问题讨论】:

  • 您是否使用任何第三方软件包进行登录?
  • @itzmeontv :没有第三方......得到了解决方案。已将其发布为答案!

标签: python django django-models django-templates django-admin


【解决方案1】:

您是否应该为您的应用创建urls.py accounts

帐户urls.py

from django.conf.urls import url

from . import views

urlpatterns = [
    # ex: /accounts/
    url(r'^login/', login_view),
]

主要是urls.py

from ...
urlpatterns = [
    ...
    url(r'^accounts/', include('yourwebsite.accounts.urls')),
    ....
]

base.html

<a href="/accounts/login">Log In</a>

【讨论】:

  • 谢谢.. 我把它改成accounts/login 以避免进一步的问题。
【解决方案2】:

我有上面提到的url(r'^', include('django.contrib.auth.urls')) login 和其他网址。这就是原因,Django 在/registration/login 下寻找模板。我仍然不知道为什么当 url 为/login 时,Django 会在该位置查找模板。当 url 为accounts/login 时,不会出现问题。我把url(r'^', include('django.contrib.auth.urls'))放在urlpatterns的末尾。

from django.conf import settings
from django.conf.urls import url, include
from django.conf.urls.static import static
from django.contrib import admin
from accounts.views import login_view, logout_view, register_view, reset_password_view

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^blog/', include('blog.urls')),
    url(r'^', include('personal.urls')), 
    url(r'^login/', login_view),
    url(r'^logout/', logout_view),
    url(r'^register/', register_view),
    url(r'^reset-password/', reset_password_view),
    url(r'^landing/', include('landing.urls')),
    url(r'^tracking/', include('tracking.urls')),
    url(r'^accounts/', include('accounts.urls')),
    url(r'^', include('django.contrib.auth.urls')),  # Put this in the end 
]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-26
    • 2017-05-28
    • 1970-01-01
    • 2016-08-07
    • 2011-01-03
    • 1970-01-01
    • 2019-01-02
    • 1970-01-01
    相关资源
    最近更新 更多