Как распечатать записи из базы данных в Django? - PullRequest
1 голос
/ 14 марта 2019

У меня есть несколько отдельных записей, сохраненных в базе данных (они называются «Вставки»). Для каждой из этих записей у меня есть случайно сгенерированная строка, которая сохраняется в поле с именем generated_url, которое я затем могу ввести в адресную строку, чтобы получить доступ к деталям, связанным с этой конкретной записью. Переход на projectname.com/jF7Fwr напечатает все детали, связанные с записью, которая имеет jF7Fwr как generated_url.

Моя проблема заключается в том, что, хотя он правильно перенаправляет на страницу, я не получаю распечатанную информацию и не знаю, почему.

Вот соответствующая часть моего views.py.

def home_view(request, *args, **kwargs):
    print(args, kwargs)
    print(request.user)
    if request.method == 'POST':
        form2 = PostForm(request.POST)
        if form2.is_valid():
            post = form2.save(commit=False)
            post.poster = request.user
            post.content = form2.cleaned_data.get('content')
            post.title = form2.cleaned_data.get('title')
            post.syntax = form2.cleaned_data.get('syntax')
            post.public = form2.cleaned_data.get('public')
            rand = str(uuid.uuid4())[:6]
            while Paste.objects.filter(generated_url=rand):
                rand = str(uuid.uuid4())[:6]
            post.generated_url = rand
            form2.save()
            context = {
                "poster_name": post.poster,
                "paste_contents": post.content,
                "paste_title": post.title,
                "paste_syntax": post.syntax,
                "paste_visible": post.public
            }
            return HttpResponseRedirect(reverse('details', args=(post.generated_url,)))
    else:
        form2 = PostForm()

    return render(request, "home.html", {'form2': form2})

def detail_view(request, *args, **kwargs):
    return render(request, "paste_detail.html", {})

А вот моя details.html страница:

{% extends "base.html" %}
{% block content %}
<p>Content of post:</p>
I AM REDIRECTED

<h1>Name of post: {{ post.title }}</h1>

<p>Content of post:</p>

<p>{{post.content|linebreaks}}</p>
<p>{{ poster_name }}
{{ paste_contents }}
{{ paste_title }}
{{ paste_syntax }}
{{ paste_visible }}</p>
<!--<form action="/{{post.generated_url}}/delete" method="post">
    {% csrf_token %}
    <input type="submit" name="delete" value="Delete" />
</form>-->
{% endblock %}

EDIT:

Должен ли мой detail_view быть примерно таким?

def detail_view(request, *args, **kwargs):
    form2 = PostForm(request.POST)
    post = form2.save(commit=False)
    post.poster = request.user
    post.content = form2.cleaned_data.get('content')
    post.syntax = form2.cleaned_data.get('syntax')
    post.public = form2.cleaned_data.get('public')
    rand = str(uuid.uuid4())[:6]
    while Paste.objects.filter(generated_url=rand):
        rand = str(uuid.uuid4())[:6]
    post.generated_url = rand
    post.save()
    context = {
        "poster_name": post.poster,
        "paste_contents": post.content,
        "paste_title": post.title,
        "paste_syntax": post.syntax,
        "paste_visible": post.public
    }
    return render(request, "paste_detail.html", context)

Я просто немного озадачен тем, как объем переменных должен переноситься из каждого def.

1 Ответ

1 голос
/ 14 марта 2019

Ваш detail_view использует пустой контекст ({}), в то время как переменная context в home_view не используется. Заполните контекст в подробном представлении, как в домашнем представлении, и это будет работать. Для этого вам придется извлечь сообщение из базы данных.

Помните, что перенаправление заставляет клиента делать новый запрос, и контекст теряется между запросами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...