2017-09-04 10 views
0

以前はNoReverse Matchエラーが発生しましたが、私はそれを盲目的に推測しました。ページが見つかりませんでした。私はいつも修正できましたので、何が起こっているのか分かりません。Django:NoReverse Matchエラーとページが見つかりません

私はすべてが正しく動作しているはずですが、私はこのコードを以前のプロジェクトと比較してもうまく見えます(私は元々入力したものではないかもしれません)。

base.html

<!DOCTYPE html> 
{% load staticfiles %} 

<html lang="en"> 
    <head> 
     <title>Evverest</title> 

     <meta name"viewport" content="width=device-width, initial-scale=1"> 
     <meta charset="uft-8"> 
     <link rel="shortcut icon" href="/images/favicon.ico"> 
     <link rel="stylesheet" href="{% static 'css/style.css' %}"> 
    </head> 

<body> 

    <nav> 
     <div class="container"> 
      <a class="brand" href="{% url 'index' %}">Evverest</a> 

      <div class="navbar"> 
       <a class="nav-link btn" href="{% url 'index' %}">Home</a> 
       {% if user.is_authenticated %} 
        <a class="nav-link" href="{% url 'users:user-profile' %}">New Color Set</a> 
        <a class="nav-link" href="{% url 'users:user_logout' %}">Logout</a> 
       {% else %} 
        <a class="nav-link" href="{% url 'users:user_login' %}">Login</a> 
        <a class="nav-link" href="{% url 'users:register' %}">Register</a> 
       {% endif %} 
      </div> 
     </div> 
    </nav> 

    <div class="container"> 
     {% block content %} 
     {% endblock %} 
    </div> 

</body> 

</html> 

アプリのviews.py

from django.shortcuts import render 
from users.forms import UserForm,UserProfileForm 
from users.models import UserProfileInfo 

from django.contrib.auth import authenticate,login,logout 
from django.http import HttpResponseRedirect, HttpResponse 
from django.core.urlresolvers import reverse 
from django.contrib.auth.decorators import login_required 

from django.contrib.auth.mixins import LoginRequiredMixin 
from django.views.generic import (TemplateView,ListView, 
            DetailView,CreateView, 
            UpdateView,DeleteView) 

# Create your views here. 
def user_login(request): 
    if request.method == 'POST': 
     username = request.POST.get('username') 
     password = request.POST.get('password') 

     user = authenticate(username=username,password=password) 

     if user: 
      if user.is_active: 
       login(request,user) 
       return HttpResponseRedirect(reverse('index')) 
      else: 
       return HttpResponse("Account now active") 

     else: 
      print("Login Unsuccessful") 
      return HttpResponse("Username and/or password are not correct") 

    else: 
     return render(request,'login.html',{}) 

def register(request): 
    registered = False 

    if request.method == 'POST': 
     user_form = UserForm(data=request.POST) 
     profile_form = UserProfileForm(data=request.POST) 

     if user_form.is_valid() and profile_form.is_valid(): 
      user = user_form.save() 
      user.set_password(user.password) 
      user.save() 

      profile = profile_form.save(commit=False) 
      profile.user = user 

      if 'profile_pic' in request.FILES: 
       profile.profile_pic = request.FILES['profile_pic'] 

      profile.save() 
      registered = True 
     else: 
      print(user_form.errors,profile_form.errors) 
    else: 
     user_form = UserForm() 
     profile_form = UserProfileForm() 

    return render(request,'register.html',{ 
             'user_form':user_form, 
             'profile_form':profile_form, 
             'registered':registered 
             }) 

@login_required 
def user_logout(request): 
    logout(request) 
    return HttpResponseRedirect(reverse('login')) 

class HomeView(ListView): 
    model = UserProfileInfo 
    ordering = ['-join_date'] 

class UserProfileView(DetailView): 
    model = UserProfileInfo 

class UserEditProfileView(LoginRequiredMixin,UpdateView): 
    login_url = '/login/' 
    redirect_field_name = '/users_detail.html' 
    form_class = UserProfileForm 
    model = UserProfileInfo 

プロジェクトurls.py

from django.conf.urls import url 
from django.contrib import admin 
from django.conf.urls import include 
from users import views 

urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url(r'^$',views.HomeView.as_view(),name='index'), 
    url(r'^users/',include('users.urls',namespace='users')), 
] 

アプリのurls.py

from django.conf.urls import url 
from users import views 

app_name = 'users' 

urlpatterns = [ 
    url(r'^login/$',views.user_login,name='user_login'), 
    url(r'^logout/$',views.user_logout,name='user_logout',kwargs={'next_page':'/'}), 
    url(r'^register/$',views.register,name='register'), 
    url(r'(?P<username>\d+)/$',views.UserProfileView.as_view(),name='user-profile'), 
    url(r'(?P<username>\d+)/edit$',views.UserEditProfileView.as_view(),name='user-profile-edit'), 
] 

ファイル構造:

enter image description here

EDITここ はトレースバックです: enter image description here

+0

どのURLが原因であるかを確認するために、エラーの完全なスタックトレースを投稿できますか? – wencakisa

+0

おそらく 'url'タグにkwargsを追加する必要があります。例えば、 '%url 'users:user-profile' username = user.username%}' –

+2

また、あなたのURLパターンは '\ d +'です。これはちょうど数字です。これを '\ w + ' – karthikr

答えて

0

はそれを考え出した:問題は、別のテンプレートに出てくる(私は投稿しなかった私はそれが持っていた認識していなかったので、

{% extends "base.html" %} 

{% block content %} 

<div class="form-base"> 
    <h2>Login</h2> 
    <form action="{% url 'users:user_login' %}" method="POST"> 
     {% csrf_token %} 
     <label for="username">Username: </label> 
     <input type="text" class="login-input" name="username" placeholder="Enter Username" /> 

     <label for="password">Password: </label> 
     <input type="password" class="login-input" name="password" /> 

     <input type="submit" name="" value="Login" /> 
    </form> 
</div> 

{% endblock %} 

がヘルプみんなありがとう:この上の任意の効果)私は名前空間ここusers

に入れませんでしたが、他のテンプレートです。

0

あなたurls.pyで見たよう:

url(r'(?P<username>\d+)/$',views.UserProfileView.as_view(),name='user-profile') 

あなたuser-profile urlは一つのパラメータを取り、 usernameです。

<a class="nav-link" href="{% url 'users:user-profile' %}">New Color Set</a> 

ので、Djangoは合格しているユーザ名を知らないと、これはNoReverseMatchが発生します。しかし、あなたのテンプレートで、あなたはそれを渡すことはありません。

あなただけのURLにusernameを渡す必要があります。

<a class="nav-link" href="{% url 'users:user-profile' username=user.username %}">New Color Set</a> 
+0

まだユーザー名はありません。私はそれをポストする前に簡単に動かせるようにしてから、何かを切り替えて動作を停止しました。 – Garrett

+0

@Garrettあなたの "home"は 'login_required'で修飾されていないので、' user'あなたの文脈であなたが認証されていなければ、プロファイルにリンクしているメニューエントリを隠すために、ユーザパラメータを必要とするメニューエントリの周りに 'if'ブロックを置くことができると思います:' {%if not user.is_authenticated%} ...{%endif%} '。しかし、あなたの 'urls.py'によれば' users:user-profile 'ビューにはユーザ名の引数が必要ですので、 'r'(?P \ d +)/ $ ''という言葉は必要ありません。 –

+0

それはまだ分かりませんでした。トレースバックを追加しました。 – Garrett

関連する問題