2017-01-13 2 views
1

ユーザーがクリックするのログイン "私は彼らがログインとIEにリダイレクトされるようにしたい、www.exampledomain.com/accounts/usernameGoesHere/NoReverseMatchエラーログイン

後のURLにユーザー名を追加しようとしたときに

EDIT :: 私はそうのような空の文字列を受け入れるように、私のURLの正規表現パターンを変更:

url(r'^$|(?P<username>[0-9a-zA-Z._]+)/$', login_required(views.IndexView.as_view()), name = 'index'), 

今、私は最初のDjangoの管理者バックエンドにログインするたびに、それが必要としてページのレンダリングhttp://localhost:8000/accounts/FlashBanistan/またはhttp://localhost:8000/accounts/ に移動しますが、まったく同じwユーザー名が途中で失われていると私に伝えています。ここで

私のトップレベルのURLです:

from django.conf.urls import url, include 
from django.contrib import admin 

# Namespace URLs 
app_name = "pto_request" 

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

、ここでは、アカウントのURLです:

from django.conf.urls import url 
from django.contrib.auth.decorators import login_required 
from accounts.views import (login_view, register_view, logout_view) 
from . import views 

app_name = 'accounts' 

urlpatterns = [ 
    # root url will look like www.website.com/accounts/ 

    url(r'^login/$', login_view, name='login'), 
    url(r'^logout/$', logout_view, name='logout'), 
    url(r'^register/$', register_view, name='register'), 
    url(r'^(?P<username>[0-9a-zA-Z._]+)/$', login_required(views.IndexView.as_view()), name = 'index'), 
] 

は、これは私のログイン図である:

def login_view(request): 
    title = "Login" 
    user_form = UserLoginForm(request.POST or None) 
    if user_form.is_valid(): 
     username = user_form.cleaned_data.get('username') 
     password = user_form.cleaned_data.get('password') 
     user = authenticate(username=username, password=password) 
     login(request, user) 
     return redirect(reverse('accounts:index', args=[username])) 
    return render(request, 'form.html', {'user_form':user_form, 'title':title}) 

これは私のログインですフォーム:

class UserLoginForm(forms.Form): 
    # Define form fields to include. 
    username = forms.CharField() 
    password = forms.CharField(widget=forms.PasswordInput) 
    # Check if user exists and logs in. 
    def clean(self, *args, **kwargs): 
     username = self.cleaned_data.get('username') 
     password = self.cleaned_data.get('password') 
     if username and password: 
      user = authenticate(username=username, password=password) 
      if not user: 
       raise forms.ValidationError('Username or password is incorrect.') 

     return super(UserLoginForm, self).clean(*args, **kwargs) 

、最終的にはこれは私が受けていますエラーのトレースバックログです:

あなたがのアカウント:インデックス 'を使用することができます
Environment: 


Request Method: GET 
Request URL: http://localhost:8000/accounts/FlashBanistan/ 

Django Version: 1.10.5 
Python Version: 3.5.2 
Installed Applications: 
['django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'crispy_forms', 
'datetimewidget', 
'accounts'] 
Installed Middleware: 
['django.middleware.security.SecurityMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware', 
'django.middleware.locale.LocaleMiddleware'] 


Template error: 
In template C:\django projects\PTO\accounts\templates\accounts\index.html, error at line 0 
    Reverse for 'index' with arguments '()' and keyword arguments '{}' not found. 1 pattern(s) tried: ['accounts/(?P<username>[0-9a-zA-Z._]+)/$'] 1 : {% extends 'base.html' %} 
    2 : {% load crispy_forms_tags %} 
    3 : 
    4 : {% block content %} 
    5 : 
    6 : {{ form.media }} 
    7 : 
    8 : 
    9 : <div class="container"> 
    10 : <div id="calendar"> 


Traceback: 

File "C:\Users\achesley\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\core\handlers\exception.py" in inner 
    39.    response = get_response(request) 

File "C:\Users\achesley\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\core\handlers\base.py" in _get_response 
    217.     response = self.process_exception_by_middleware(e, request) 

File "C:\Users\achesley\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\core\handlers\base.py" in _get_response 
    215.     response = response.render() 

File "C:\Users\achesley\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\template\response.py" in render 
    109.    self.content = self.rendered_content 

File "C:\Users\achesley\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\template\response.py" in rendered_content 
    86.   content = template.render(context, self._request) 

File "C:\Users\achesley\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\template\backends\django.py" in render 
    66.    return self.template.render(context) 

File "C:\Users\achesley\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\template\base.py" in render 
    208.      return self._render(context) 

File "C:\Users\achesley\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\template\base.py" in _render 
    199.   return self.nodelist.render(context) 

File "C:\Users\achesley\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\template\base.py" in render 
    994.     bit = node.render_annotated(context) 

File "C:\Users\achesley\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\template\base.py" in render_annotated 
    961.    return self.render(context) 

File "C:\Users\achesley\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\template\loader_tags.py" in render 
    174.   return compiled_parent._render(context) 

File "C:\Users\achesley\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\template\base.py" in _render 
    199.   return self.nodelist.render(context) 

File "C:\Users\achesley\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\template\base.py" in render 
    994.     bit = node.render_annotated(context) 

File "C:\Users\achesley\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\template\base.py" in render_annotated 
    961.    return self.render(context) 

File "C:\Users\achesley\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\template\defaulttags.py" in render 
    315.     return nodelist.render(context) 

File "C:\Users\achesley\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\template\base.py" in render 
    994.     bit = node.render_annotated(context) 

File "C:\Users\achesley\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\template\base.py" in render_annotated 
    961.    return self.render(context) 

File "C:\Users\achesley\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\template\defaulttags.py" in render 
    439.    url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app) 

File "C:\Users\achesley\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\urls\base.py" in reverse 
    91.  return force_text(iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))) 

File "C:\Users\achesley\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\urls\resolvers.py" in _reverse_with_prefix 
    392.    (lookup_view_s, args, kwargs, len(patterns), patterns) 

Exception Type: NoReverseMatch at /accounts/FlashBanistan/ 
Exception Value: Reverse for 'index' with arguments '()' and keyword arguments '{}' not found. 1 pattern(s) tried: ['accounts/(?P<username>[0-9a-zA-Z._]+)/$'] 
+0

の可能な複製を[NoReverseMatchエラーは何ですかどのように修正すればよいですか?](http://stackoverflow.com/questions/38390177/what-is-a-noreversematch-error-and-how-do-i-fix-it) – Sayse

+0

シェルでは逆の( 'accounts:index'、args = [username])」と表示され、うまくいきます。エラーは生成されません。 – FlashBanistan

+0

あなたはユーザー名をキャプチャするために名前付き正規表現を使用するので、argsの代わりにkwargsを試してください:return redirect(reverse( 'accounts:index'、kwargs = {'username':username})) – Jingo

答えて

0
urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url(r'^accounts/', include('accounts.urls', namaspace="accounts")), 
] 

使用namepsace

+0

Djangoは既に正しいURLを見つけることができるので、URL名は問題ではないので、これで問題は解決しません。 – Sayse