Почему этот код не работает, как я могу получить определенную часть URL? - PullRequest
0 голосов
/ 31 мая 2019

У меня следующий URL http://localhost:8000/enthusiastically-synergize-optimal-results-after-proactive-total-linkage/edit/, и я хотел бы получить доступ к этому слагу из этого URL в этой функции, чтобы я мог его использовать. В представлении на основе классов я мог бы использовать self.kwargs.get('smthng') и взять его, но не знаю, как мне это сделать:

def permission_of_user_for_posts(request):
post = get_object_or_404(Blog, slug= request.GET.get('blog_slug'))
if request.user.username == post.author:
    return True
return False


@user_passes_test(permission_of_user_for_posts)
def blog_update(request, blog_slug):
blog = get_object_or_404(Blog, slug=blog_slug)
if request.method == 'POST':
    form = BlogForm(request.POST, request.FILES, instance=blog)
    if form.is_valid():
        form.instance.author = request.user
        form.save()
        return redirect('/')

form = BlogForm(instance=blog)
context= {
    'form': form
}
return render(request, 'blogs/form.html', context)

или есть что-то еще, что я делаю неправильно в функции permission_of_user_for_posts? пожалуйста, помогите мне спасибо

изменить: это URL

urlpatterns = [
    path('', blogs_view.home, name='home'),
    path('blogs/', blogs_view.blogs, name='blogs'),
    path('<slug:blog_slug>', blogs_view.blog_detail, name='blog_detail'),
    path('post/', blogs_view.blog_create, name='blog_create'),
    path('<slug:blog_slug>/edit/', blogs_view.blog_update, name='blog_update'),
    path('<slug:blog_slug>/delete/', blogs_view.blog_delete, name='blog_delete'),
]

1 Ответ

1 голос
/ 31 мая 2019

Способ сделать это - вообще не использовать декоратор или отдельную функцию. Просто проверьте сообщение в представлении:

def blog_update(request, blog_slug):
    blog = get_object_or_404(Blog, slug=blog_slug)
    if not request.user == blog.author:
        raise PermissionDenied 
    if request.method == 'POST':
        ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...