Мое приложение сломалось. Я следую учебнику, и я могу создавать сообщения. Но когда я пытаюсь редактировать их, я получаю следующую ошибкуЯ больше не могу обновлять содержимое django
NoReverseMatch at /posts/16/edit/
Reverse for 'detail' with arguments '('1', '6')' and keyword arguments '{}' not found. 1 pattern(s) tried: ['posts/(?P<id>\\d+)/$']
Если я пытаюсь редактировать мои старые сообщения я создал пару дней назад, я не получаю эту ошибку. Я не знаю, что я сделал в то время как я следовал этот учебник, чтобы сломать его
Heres мой urls.py
from django.conf.urls import url
from .views import *
urlpatterns = [
url(r'^$', post_list, name='list'),
url(r'^create$', post_create, name='create'),
url(r'^(?P<id>\d+)/$', post_detail, name='detail'),
url(r'^(?P<id>\d+)/edit/$', post_update, name='update'),
url(r'^(?P<id>\d+)/delete/$', post_delete, name='delete'),
]
Heres мои взгляды
from django.contrib import messages
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
from django.shortcuts import render, get_object_or_404, redirect
from .forms import PostForm
from .models import Post
# Create your views here.
def post_create(request):
form = PostForm(request.POST or None)
if form.is_valid():
instance = form.save(commit=False)
instance.save()
messages.success(request, "Created !!")
return HttpResponseRedirect(reverse('posts:list'))
else:
messages.error(request, "not Created !!")
context = {
"form": form,
"title": "Create Form"
}
return render(request, "posts/post_form.html", context)
def post_detail(request, id=None):
instance = get_object_or_404(Post, id=id)
context = {
"title": instance.title,
"instance": instance
}
return render(request, "posts/post_detail.html", context)
def post_list(request):
queryset = Post.objects.all()
context = {
"queryset": queryset,
"title": "My user List",
}
return render(request, "posts/base.html", context)
def post_update(request, id=None):
instance = get_object_or_404(Post, id=id)
form = PostForm(request.POST or None, instance=instance)
if form.is_valid():
instance = form.save(commit=False)
instance.save()
messages.success(request, "saved !!")
return HttpResponseRedirect(reverse('posts:detail', args=id))
context = {
"title": instance.title,
"instance": instance,
"form": form
}
return render(request, "posts/post_form.html", context)
def post_delete(request, id=None):
instance = get_object_or_404(Post, id=id)
instance.delete()
messages.success(request, "Deleted !!")
return redirect('posts:list')
Heres мой post_detail.html
{% extends "posts/base.html" %}
{% block content %}
<h1>{{ title }}</h1>
<p><a href='{% url "posts:list" %}'>Back</a></p>
<p><a href='{% url "posts:delete" instance.id %}'>delete</a></p>
<h3>{{instance.title}}</h3>
<p>{{instance.content}}</p>
<p>{{instance.timestamp}}</p>
<p>{{instance.updated}}</p>
<p>{{instance.id}}</p>
{% endblock content %}
heres мой post_form.html
{% extends "posts/base.html" %}
{% block content %}
{{ block.super }}
<h1>Edit: {{ title }}</h1>
<form method='post' action=''>{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Create Post">
</form>
{% endblock content %}}
Heres мой base.html
<html>
<body>
{% if messages %}
<div class="messages">
<ul class="messages">
{% for message in messages %}
<li {% if message.tags %} class="{{ message.tags }}" {% endif %} >{{ message }} </li>
{% endfor %}
</ul>
{% ENDIF%}
<div class="container">
{% block content %}
<p>parent page</p>
<h1>{{ title }} is working</h1>
{% for p in queryset %}
<a href='{% url "posts:detail" p.id %}'>
<h3>{{p.title}}</h3>
</a>
{% if user.is_authenticated %}
<a href='{% url "posts:update" p.id %}'>edit</a>
<a href='{% url "posts:delete" p.id %}'>delete</a>
{% endif %}
<p>{{p.content}}</p>
<p>{{p.timestamp}}</p>
<p>{{p.updated}}</p>
<p>{{p.id}}</p>
<hr>
{% endfor %}
{% endblock content %}
</div>
</body>
</html>
мой отслеживающий
Окружающая среда:
Request Method: POST
Request URL: http://localhost:8000/posts/16/edit/
Django Version: 1.9.1
Python Version: 3.5.1
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'posts.apps.PostsConfig']
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.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Traceback:
File "/Users/ray/Desktop/mypy/trydjango/lib/python3.5/site-packages/django/core/handlers/base.py" in get_response
149. response = self.process_exception_by_middleware(e, request)
File "/Users/ray/Desktop/mypy/trydjango/lib/python3.5/site-packages/django/core/handlers/base.py" in get_response
147. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/ray/Desktop/mypy/trydjango/src/posts/views.py" in post_update
63. return HttpResponseRedirect(reverse('posts:detail', args=id))
File "/Users/ray/Desktop/mypy/trydjango/lib/python3.5/site-packages/django/core/urlresolvers.py" in reverse
600. return force_text(iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)))
File "/Users/ray/Desktop/mypy/trydjango/lib/python3.5/site-packages/django/core/urlresolvers.py" in _reverse_with_prefix
508. (lookup_view_s, args, kwargs, len(patterns), patterns))
Exception Type: NoReverseMatch at /posts/16/edit/
Exception Value: Reverse for 'detail' with arguments '('1', '6')' and keyword arguments '{}' not found. 1 pattern(s) tried: ['posts/(?P<id>\\d+)/$']
Любые советы о том, как исправить это, были бы весьма полезны.
Спасибо безмерно. Вот что поставило проблему. Теперь я вижу, почему работают предыдущие, они были одиночными цифрами. – losee