Оповещение пользователя в шаблоне после того, как он успешно создал / отредактировал / удалил сообщение (объект) - PullRequest
0 голосов
/ 03 февраля 2020

Резюме: я пытаюсь создать сайт о вакансиях. У меня есть dashboard представление, которое возвращает все job объекты и отображает их в шаблоне. Пользователь может перемещаться здесь только для просмотра своих сообщений, и пользователь также перенаправляется сюда после создания нового сообщения, редактирования сообщения или удаления сообщения. Я хотел бы иметь возможность предупредить пользователя «Ваше сообщение было создано / отредактировано / удалено успешно» в зависимости от того, как они попали на эту страницу, но я не уверен, что лучший способ go о. Ниже показано, как я реализовал функцию оповещения пользователя о создании сообщения, но я не думаю, что это был лучший способ сделать это.

Первое созданное мной представление было post_job, где пользователь может создать новую должность. Чтобы отметить, что задание было новым, я подумал добавить логическое поле к модели Job:

class Job(models.model):
    #...
    new = models.BooleanField(default = True) # post is new by default, set to False later

, а затем сделать это в dashboard:

@login_required
def dashboard(request):
    jobs = Job.objects.all()
    new_job = False # set to true if there is a new job ( would only be the case if the user got directed to this view after posting a job)
    for job in jobs: # loop through jobs to see if any have new=True
        if job.new:
            new_job = True
            job.new = False # set to false so it's not considered new next time dashboard is loaded
            job.save()
    return render(request, 'job/dashboard.html', {'jobs':jobs, 'new_job': new_job})

и на панели инструментов. html:

    {% if new_job %}
        <p>Your job was posted successfully</p>
    {% endif %}

Это работает и успешно предупреждает пользователя только тогда, когда он только что создал новое сообщение. Тем не менее, я чувствую, что должен быть лучший способ реализовать эту функцию, чем добавить поле edited к модели Job и собирался сказать поле deleted, но я думаю, что объект больше не будет существовать. В любом случае, если вы можете предложить что-либо для достижения этой цели, спасибо за помощь. Не уверен, что это правильный термин, но кажется, что существует система маркировки, которая предупреждает, когда объект создается / редактируется / обновляется, если это довольно часто?

Редактировать: Есть ли способ передать дополнительные переменные при перенаправлении в представление dashboard? Например, вот представление post_job:

def post_job(request):
    if request.method == 'POST':
        form = JobForm(request.POST)
        if form.is_valid():
            instance = form.save(commit=False)
            instance.business= Business.objects.get(user=request.user)
            instance.save()
            return redirect('dashboard') # is there a way to tell the dashboard view the post_job view sent the user? 
    else:
        form = JobForm()
    return render(request, 'job/post_job.html', {'section': 'dashboard', 'form':form})

, если бы я мог просто сделать это для edit и delete представлений.

1 Ответ

1 голос
/ 03 февраля 2020
Фреймворк

Django messages построен для случаев использования именно так. Вместо

new_job = True

перед вызовом .save () используйте:

messages.success(request, 'Job successfully created/updated/deleted.')

Тогда в вашем файле html вы получите:

     {% if messages %}
        <ul class="messages">
            {% for message in messages %}
                <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
            {% endfor %}
        </ul>
    {% endif %}

Кроме того, я бы предложил выполнить какую-то очистку / проверку перед вызовом .save (). Если проверка не пройдена, вы можете создать сообщение об ошибке или предупреждение для отображения. Документацию по структуре сообщений Django можно найти здесь .

...