В моем блоге - соответствующий запрос не существует - PullRequest
1 голос
/ 04 мая 2020

Я пытался учиться так. И попробуйте разработать мой блог и добавить SLUG к функции. Но добавить новые сообщения вообще невозможно. У вас есть решение или способ заставить его работать?

https://tutorial.djangogirls.org/en/django_forms/

на моделях, подобных этой.

class Post(models.Model):
id = models.AutoField
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
content_images = models.ImageField(default='Choose Your Images')
title = models.CharField(max_length=200,unique=True)
content = models.TextField()
created_date = models.DateTimeField(default=timezone.now)
published_date = models.DateTimeField(blank=True, null=True)
post_viewcount = models.PositiveIntegerField(default=0)
slug = models.SlugField(max_length=200, default='Enter SEO URL')
status = models.IntegerField(choices=STATUS , default=0)

и views.py вот так

def create_post(request):
form = Createcontent
return render(request, 'blog/post_creator.html', {'form': form})

и urls.py вот так

urlpatterns = [
path('', views.post_list, name='post_list'),
path('content/<slug:slug>/', views.post_detail, name='post_detail'),
path('content/createcontent/', views.create_post, name='create_post'),

и html file.

   {% extends 'blog/base.html' %} {% block content %}
<h2>New post</h2>
<form method="POST" class="post-form">{% csrf_token %} {{ form.as_p }}
    <button type="submit" class="save btn btn-default">Save</button>
</form>
{% endblock %}

1 Ответ

1 голос
/ 04 мая 2020

Для вашего пути 'create_post', <slug:slug> сначала поймает это, так как createcontent также является допустимым слагом. Поэтому вы должны изменить urlpatterns. Вы можете поменять их местами:

urlpatterns = [
    path('content/createcontent/', views.create_post, name='create_post'),
    path('content/<slug:slug>/', views.post_detail, name='post_detail'),
]

, так что теперь createcontent будет сопоставлено первым, но все же это не хорошее решение, так как теперь, если ваша статья имеет слаг createcontent, вы не можете отобразить его. Скорее всего, лучше создать непересекающихся путей. Например:

urlpatterns = [
    path('content/createcontent/', views.create_post, name='create_post'),
    path('<b>post/</b><slug:slug>/', views.post_detail, name='post_detail'),
]

здесь, независимо от значения slug, оно никогда не будет пересекаться с путем content/createcontent.

Вам, конечно, все же нужно завершить sh само представление, поскольку сейчас оно не будет правильно обрабатывать запрос POST.

...