#python #django
#python #django
Вопрос:
эта ошибка убивает меня, пожалуйста, помогите, я сидел в течение 3 часов, и я даже не мог понять, почему происходит ошибка, я предоставлю всю необходимую информацию, кстати, я новичок в Django, поэтому, пожалуйста, объясните, если можете, спасибо, ошибка: NoReverseMatch в / Reverse для ‘view_profile_with_pk’ саргументы ключевого слова ‘{‘pk’: «}’ не найдены. попробовано 1 шаблон (ы): [‘учетная запись / профиль /(P(?P [^/] ) \ d ) /$’] Мои URLs .py
from django.urls import path, include
from . import views
from django.contrib.auth.views import (PasswordResetView , PasswordResetDoneView, PasswordResetConfirmView,
PasswordResetCompleteView)
app_name= 'accounts'
urlpatterns = [
path('signup/', views.register, name='signup'),
path('login/', views.login, name='login'),
path('logout', views.logout, name='logout'),
path('profile/', views.view_profile, name='view_profile'),
path('profile/(P<pk>d )/', views.view_profile, name='view_profile_with_pk'),
path('profile/edit/', views.edit_profile, name='edit_profile'),
path('change-password/', views.change_password, name='change_password'),
path('password_reset/', PasswordResetView.as_view(), name='password_reset'),
path('password_reset/done/', PasswordResetDoneView.as_view(), name='password_reset_done'),
path('reset/<uidb64>/<token>/', PasswordResetConfirmView.as_view(), name='password_reset_confirm'),
path('reset/done/',PasswordResetCompleteView.as_view(), name='password_reset_complete'),
]
Мой views.py
from django.shortcuts import render, redirect
from django.contrib.auth.models import User
from django.contrib import auth
from django.contrib.auth.decorators import login_required
from django.contrib.auth.forms import UserChangeForm, PasswordChangeForm
from django.contrib.auth import update_session_auth_hash
from django.urls import reverse
from accounts.forms import (
RegistrationForm,
EditProfileForm,
UserProfileForm
)
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserChangeForm, PasswordChangeForm
from django.contrib.auth import update_session_auth_hash
from django.contrib.auth.decorators import login_required
def register(request):
if request.method =='POST':
form = RegistrationForm(request.POST)
if form.is_valid():
form.save()
return redirect('accounts:home')
else:
form = RegistrationForm()
args = {'form': form}
return render(request, 'accounts/reg_form.html', args)
def view_profile(request, pk=None):
if pk:
user = User.objects.get(pk=pk)
else:
user = request.user
args = {'user': user}
return render(request, 'accounts/profile.html', args)
def edit_profile(request):
if request.method == 'POST':
form = EditProfileForm(request.POST, instance=request.user)
imgF = UserProfileForm(request.POST, instance=request.user)
if form.is_valid():
form.save()
imgF.save()
return redirect('accounts:view_profile')
else:
form = EditProfileForm(instance=request.user)
imgF = UserProfileForm(instance=request.user)
args = {'form': form , 'img':imgF}
return render(request, 'accounts/edit_profile.html', args)
def change_password(request):
if request.method == 'POST':
form = PasswordChangeForm(data=request.POST, user=request.user)
if form.is_valid():
form.save()
update_session_auth_hash(request, form.user)
return redirect('accounts:view_profile')
else:
return redirect('accounts:change_password')
else:
form = PasswordChangeForm(user=request.user)
args = {'form': form}
return render(request, 'accounts/change_password.html', args)
def login(request):
if request.method == 'POST':
user = auth.authenticate(username=request.POST['username'],password=request.POST['password'])
if user is not None:
auth.login(request, user)
return redirect('home:home')
else:
return render(request, 'accounts/login.html',{'error':'username or password is incorrect.','user':user})
else:
return render(request, 'accounts/login.html')
def logout(request):
if request.method == 'POST':
auth.logout(request)
return redirect('home:home')
Обратная трассировка:
Traceback (most recent call last):
File "C:Usersdagheanaconda3envsenvlibsite-packagesdjangocorehandlersexception.py", line 47, in inner
response = get_response(request)
File "C:Usersdagheanaconda3envsenvlibsite-packagesdjangocorehandlersbase.py", line 179, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:Usersdagheanaconda3envsenvlibsite-packagesdjangoviewsgenericbase.py", line 70, in view
return self.dispatch(request, *args, **kwargs)
File "C:Usersdagheanaconda3envsenvlibsite-packagesdjangoviewsgenericbase.py", line 98, in dispatch
return handler(request, *args, **kwargs)
File "C:UsersdagheDesktopAlone-Osamahomeviews.py", line 26, in get
return render(request, self.template_name, args)
File "C:Usersdagheanaconda3envsenvlibsite-packagesdjangoshortcuts.py", line 19, in render
content = loader.render_to_string(template_name, context, request, using=using)
File "C:Usersdagheanaconda3envsenvlibsite-packagesdjangotemplateloader.py", line 62, in render_to_string
return template.render(context, request)
File "C:Usersdagheanaconda3envsenvlibsite-packagesdjangotemplatebackendsdjango.py", line 61, in render
return self.template.render(context)
File "C:Usersdagheanaconda3envsenvlibsite-packagesdjangotemplatebase.py", line 170, in render
return self._render(context)
File "C:Usersdagheanaconda3envsenvlibsite-packagesdjangotemplatebase.py", line 162, in _render
return self.nodelist.render(context)
File "C:Usersdagheanaconda3envsenvlibsite-packagesdjangotemplatebase.py", line 938, in render
bit = node.render_annotated(context)
File "C:Usersdagheanaconda3envsenvlibsite-packagesdjangotemplatebase.py", line 905, in render_annotated
return self.render(context)
File "C:Usersdagheanaconda3envsenvlibsite-packagesdjangotemplateloader_tags.py", line 150, in render
return compiled_parent._render(context)
File "C:Usersdagheanaconda3envsenvlibsite-packagesdjangotemplatebase.py", line 162, in _render
return self.nodelist.render(context)
File "C:Usersdagheanaconda3envsenvlibsite-packagesdjangotemplatebase.py", line 938, in render
bit = node.render_annotated(context)
File "C:Usersdagheanaconda3envsenvlibsite-packagesdjangotemplatebase.py", line 905, in render_annotated
return self.render(context)
File "C:Usersdagheanaconda3envsenvlibsite-packagesdjangotemplateloader_tags.py", line 62, in render
result = block.nodelist.render(context)
File "C:Usersdagheanaconda3envsenvlibsite-packagesdjangotemplatebase.py", line 938, in render
bit = node.render_annotated(context)
File "C:Usersdagheanaconda3envsenvlibsite-packagesdjangotemplatebase.py", line 905, in render_annotated
return self.render(context)
File "C:Usersdagheanaconda3envsenvlibsite-packagesdjangotemplatedefaulttags.py", line 211, in render
nodelist.append(node.render_annotated(context))
File "C:Usersdagheanaconda3envsenvlibsite-packagesdjangotemplatebase.py", line 905, in render_annotated
return self.render(context)
File "C:Usersdagheanaconda3envsenvlibsite-packagesdjangotemplatedefaulttags.py", line 446, in render
url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app)
File "C:Usersdagheanaconda3envsenvlibsite-packagesdjangourlsbase.py", line 87, in reverse
return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))
File "C:Usersdagheanaconda3envsenvlibsite-packagesdjangourlsresolvers.py", line 685, in _reverse_with_prefix
raise NoReverseMatch(msg)
Exception Type: NoReverseMatch at /
Exception Value: Reverse for 'view_profile_with_pk' with keyword arguments '{'pk': ''}' not found. 1 pattern(s) tried: ['account\/profile\/\(P(?P<pk>[^/] )\\d\ \)\/$']
profile.html:
{% extends 'base.html' %}
{% block head %}
<title>Profile</title>
{% endblock %}
{% block content %}
<div class="container">
<h1>Profile</h1>
<p>Username: {{ user }}</p>
<p>First name: {{ user.first_name }}</p>
<p>Last name: {{ user.last_name }}</p>
<p>Email: {{ user.email }}</p>
<p>Description: {{ user.userprofile.description }}</p>
<p>Phone: {{ user.userprofile.phone }}</p>
<p>City: {{ user.userprofile.city }}</p>
<p>Website: {{ user.userprofile.website }}</p>
{% if user.userprofile.image %}
<img src="{{ user.userprofile.image.url }}" width="240">
{% endif %}
</div>
{% endblock %}
Base.html
<!doctype html>
<html lang="en">
<head>
{% load static %}
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="">
<meta name="author" content="">
<title>Osama Daghestani</title>
<link rel="stylesheet" href="{% static 'navstyle.css' %}">
<!-- Bootstrap core CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA 058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<link href="{% static 'open-iconic/font/css/open-iconic-bootstrap.css' %}" rel="stylesheet">
<link href="{% static 'fontawesome/css/all.css'%}" rel="stylesheet">
<link rel="apple-touch-icon" sizes="60x60" href="static/Favicon//apple-icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="static/Favicon//apple-icon-72x72.png">
<link rel="apple-touch-icon" sizes="76x76" href="static/Favicon//apple-icon-76x76.png">
<link rel="apple-touch-icon" sizes="114x114" href="static/Favicon//apple-icon-114x114.png">
<link rel="apple-touch-icon" sizes="120x120" href="static/Favicon//apple-icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="static/Favicon//apple-icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="static/Favicon//apple-icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="static/Favicon/apple-icon-180x180.png">
<link rel="icon" type="image/png" sizes="192x192" href="static/Favicon//android-icon-192x192.png">
<link rel="icon" type="image/png" sizes="32x32" href="static/Favicon//favicon-32x32.png">
<link rel="icon" type="image/png" sizes="96x96" href="static/Favicon//favicon-96x96.png">
<link rel="icon" type="image/png" sizes="16x16" href="static/Favicon//favicon-16x16.png">
<link rel="manifest" href="/manifest.json">
<meta name="msapplication-TileColor" content="#ffffff">
<meta name="msapplication-TileImage" content="static/Favicon//ms-icon-144x144.png">
<meta name="theme-color" content="#ffffff">
</head>
<body>
<header>
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<a class="navbar-brand" href="{% url 'home:home' %}">
<img src="{% static 'logo.png' %}" height=30 width=30 class="d-inline-block alighn-top" />
Osama Daghestani
</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavAltMarkup" aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse " id="navbarNavAltMarkup">
<div class="navbar-nav ml-auto">
{% if user.is_authenticated %}
<a class="nav-item nav-link" href="">Post <i class="fas fa-plus"></i></span></a>
<div class="nav-item nav-link dropdown">
<a id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
dasdas<img class="UserImage" src="{{ user.userprofile.image.url }}" height="30" width="30" alt="">
</a>
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="dropdownMenuButton">
<a class="dropdown-item" href="{% url 'accounts:view_profile' %}"><i class="fas fa-user"></i> Profile</a>
<a class="dropdown-item" href="{% url 'accounts:edit_profile' %}"><i class="fas fa-cog"></i> Settings</a>
<a class="dropdown-item" href="javascript:{document.getElementById('logout').submit()}"onclick=""><i class="fas fa-user-minus"></i> Logout</a>
</div>
</div>
<form id="logout" method="POST" action="{% url 'accounts:logout' %}">
{% csrf_token %}
<input type="hidden" />
</form>
{% else %}
<a class="nav-item nav-link" href="{% url 'accounts:signup' %}">Sign Up <i class="fas fa-user-plus"></i></a>
<a class="nav-item nav-link" href="{% url 'accounts:login' %}">Login <i class="fas fa-user"></i></a>
{% endif %}
</div>
</div>
</nav>
</header>
<div class="container">
{% block content %}
{% endblock %}
</div>
<footer class="text-muted">
<div class="container text-center">
<p>©Alone {% now "Y" %} By Osama Daghestani</p>
</div>
</footer>
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5 76PVCmYl" crossorigin="anonymous"></script>
</body>
</html>
Home.html
{% extends 'base.html' %}
{% block content %}
<div class="container">
<div class="col-md-8">
<h2>Home</h2>
<form method="post">
{% csrf_token %}
{{ form.post }}
<br>
<button type="submit">Submit</button>
</form>
<h2>{{ text }}</h2>
{% for post in posts %}
<h1>{{ post.post }}</h1>
<p>Posted by {{ post.user.get_full_name }} on {{ post.created }}</p>
{% endfor %}
</div>
<div class="col-md-4">
<h2>Other People</h2>
{% for user in users %}
<a href="{% url 'accounts:view_profile_with_pk' pk=user.pk %}">
<h3>{{ user.username }}</h3>
</a>
{% if not user in friends %}
<a href="{% url 'home:change_friends' operation='add' pk=user.pk %}">
<button type="button" class="btn btn-success">Add Friend</button>
</a>
{% endif %}
{% endfor %}
<h2>Friends</h2>
{% for friend in friends %}
<a href="{% url 'accounts:view_profile_with_pk' pk=friend.pk %}">
<h3>{{ friend.username }}</h3>
</a>
<a href="{% url 'home:change_friends' operation='remove' pk=friend.pk %}">
<button type="button" class="btn btn-default">Remove Friend</button>
</a>
{% endfor %}
</div>
</div>
{% endblock %}
Models.py:
from django.db import models
from django.contrib.auth.models import User
class Post(models.Model):
post = models.CharField(max_length=500)
user = models.ForeignKey(User, on_delete=models.CASCADE)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
class Friend(models.Model):
users = models.ManyToManyField(User)
current_user = models.ForeignKey(User, related_name='owner', null=True, on_delete=models.CASCADE)
@classmethod
def make_friend(cls, current_user, new_friend):
friend, created = cls.objects.get_or_create(
current_user=current_user
)
friend.users.add(new_friend)
@classmethod
def lose_friend(cls, current_user, new_friend):
friend, created = cls.objects.get_or_create(
current_user=current_user
)
friend.users.remove(new_friend)
Домашние представления:
from django.views.generic import TemplateView
from django.shortcuts import render, redirect
from django.contrib.auth.models import User
from home.forms import HomeForm
from home.models import Post, Friend
class HomeView(TemplateView):
template_name = 'home/home.html'
def get(self, request):
form = HomeForm()
posts = Post.objects.all().order_by('-created')
users = User.objects.exclude(id=request.users.id)
if request.user.is_authenticated:
friend = Friend.objects.get(current_user=request.users)
friends = friend.users.all()
else:
friend=1
friends=(1,)
args = {
'form': form, 'posts': posts, 'users': users, 'friends': friends
}
return render(request, self.template_name, args)
def post(self, request):
form = HomeForm(request.POST)
if form.is_valid():
post = form.save(commit=False)
post.users = request.users
post.save()
text = form.cleaned_data['post']
form = HomeForm()
return redirect('home:home')
args = {'form': form, 'text': text}
return render(request, self.template_name, args)
def change_friends(request, operation, pk):
friend = User.objects.get(pk=pk)
if operation == 'add':
Friend.make_friend(request.users, friend)
elif operation == 'remove':
Friend.lose_friend(request.users, friend)
return redirect('home:home')
Комментарии:
1. Попробовать
reverse('accounts:view_profile_with_pk')
?2. Поделитесь шаблоном, в котором возникает ошибка.
3. Мистер / миссис Виллем Ван Онсем, я поделился им, теперь он называется profile.html
4. Мистер / Миссис Д. Малан, где мне попробовать обратный (‘accounts: view_profile_with_pk’) в views.py ?
5. Можете ли вы также поделиться базовым шаблоном?
Ответ №1:
Теперь я вижу, что вы передаете значение pk, используя {% url 'view_profile_with_pk' pk=user.pk %}
На основе ошибки:
Exception Value: Reverse for 'view_profile_with_pk' with keyword arguments '{'pk': ''}' not found.
Значение pk не передается. Я вижу, что вы используете этот URL-адрес в двух местах вашего home.html
файла.
Это наводит меня на мысль user
, что либо friend
объект or не существует в вашем цикле. Проверьте views.py
файл, в котором указан ваш домашний маршрут. Убедитесь, что вы отправляете допустимые переменные для обоих users
и friends
. Убедитесь, что вы используете users
, а не user
Редактировать:
В том views.py
, который содержит ваш домашний маршрут, вы создаете переменную, вызываемую friends
, если пользователь аутентифицирован, friends
содержит всех друзей, принадлежащих пользователю. Однако, если пользователь не прошел проверку подлинности, вы присваиваете friends
кортежу friends=(1,)
. Этот кортеж не будет иметь значения первичного ключа.
Когда URL пытается передать значение pk, оно будет пустым. Попробуйте изменить значение friends
на None
, если пользователь не аутентифицирован.
Комментарии:
1. Я добавил свой home.html и, как вы видите, я уже использую этот метод
2. Я вижу это. Используете ли вы
get_absolute_url()
в своем models.py файл?3. Я не я добавил свои models .py кстати
4. должен ли я присвоить ему значение 0?
5. но теперь я получаю сообщение об ошибке, которое, я думаю, вам легко решить, можете ли вы мне помочь или вам достаточно скучно?