Я пытаюсь отправить сообщение об ошибке в шаблон с помощью «сообщений».Я использовал документацию здесь , и я также посмотрел несколько SO сообщений.Наиболее перспективным выглядит здесь .Я полагаю, что я следую инструкциям, но искал и модифицировал это в течение половины дня и не знаю, в чем ошибка.Сообщение не отображается на странице, и я не могу найти ошибку в своем коде.
from django.contrib import messages
def new_article(request):
save_article = SearchResults.objects.new_article(request.POST)
r_id = save_article
result_id = ""
#the try is working as intended and I'm getting the id like I want
try:
if int(r_id):
result_id = r_id
# when the link is already in the database then it goes to
# except ; that portion is working because I'm getting the print
except:
print("article already exists in database")
# I think the next lines are the problem. I've rearranged them
# in multiple ways
messages.error(request,'This article already exists in database')
return redirect (reverse('example:results'))
Я сделал print("article already exists in database")
, и это работает.Так что я знаю, что это делает, кроме.
index.html
<body>
<div id="container">
<h1 id="heading">Results</h1>
<button id="create-article">Add Article</button>
{% if messages %}
<ul class="messages">
{% for message in messages %}
<li {% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
{% endfor %}
<ul>
{% endif %}
У меня проблема в том, что сообщение не появляется на странице.
ОБНОВЛЕНИЕ:
Я думаю, что проблемы могут быть в: return redirect (reverse('example:results'))
, а не в функции сообщений.Похоже, что шаблон не перезагружается и поэтому не отображает новое сообщение.
Я изменил его на: return redirect(request,'example/results.html
, и это дает мне это сообщение об ошибке:
raise NoReverseMatch(msg) django.urls.exceptions.NoReverseMatch: Reverse for '<WSGIRequest: POST '/new_article'>' not found. > '<WSGIRequest: POST '/new_article'>'> is not a valid view function or pattern name.
'new_article' isURL-адрес ajax внутри сценария
Если я обновлю страницу, появится сообщение и ошибка в терминале исчезнет.Как я могу перезагрузить страницу с ошибкой messages.error, не вызывая вышеуказанную ошибку (поднять NoReverseMatch (msg) ....) в терминале и не обновляя страницу вручную?
script
$( function() {
var dialog, form,
datepicker = $( "#datepicker" ),
exerciseName = $( "#exampleName" ),
articleTitle = $( "#articleTitle" ),
articleLink = $( "#articleLink" ),
nds_check = $( "#check" ),
general_notes = $('#Notes'),
allFields = $( [] ).add( datepicker ).add( exampleName ).add( articleTitle ).add( articleLink ).add( check )
.add( Notes )
tips = $( ".validateTips" );
function updateTips( t ) {
tips
.text( t )
.addClass( "ui-state-highlight" );
setTimeout(function() {
tips.removeClass( "ui-state-highlight", 1500 );
}, 500 );
}
function checkLength( o, n, min, max ) {
if ( o.val().length > max || o.val().length < min ) {
o.addClass( "ui-state-error" );
updateTips( "Fields cannot be empty or be longer than 255 characters");
return false;
} else {
return true;
}
}
function addArticle() {
var valid = true;
allFields.removeClass( "ui-state-error" );
valid = valid && checkLength( datepicker, "datepicker", 1, 250 );
valid = valid && checkLength( exampleName, "exampleName", 1, 100 );
valid = valid && checkLength( articleTitle, "articleTitle", 1, 250 );
valid = valid && checkLength( articleLink, "articleLink", 1, 250 );
if ( valid ) {
$.ajax({
url: 'new_article',
type: 'POST',
data: $('#new_form').serialize()
})
dialog.dialog( "close" );
}
return valid;
}
dialog = $( "#dialog-form" ).dialog({
autoOpen: false,
height: 900,
width: 1000,
modal: true,
buttons: {
"Add Article": addArticle,
Cancel: function() {
dialog.dialog( "close" );
}
},
close: function() {
form[ 0 ].reset();
allFields.removeClass( "ui-state-error" );
}
});
form = dialog.find( "form" ).on( "submit", function( event ) {
event.preventDefault();
addArticle();
});
$( "#create-article" ).button().on( "click", function() {
dialog.dialog( "open" );
});
} );
$( function() {
$( "#datepicker" ).datepicker();
} );
$("#nds_check").on('change', function() {
if ($(this).is(':checked')) {
$(this).attr('value', 'true');
} else {
$(this).attr('value', 'false');
}
});
</script>
Я хочу получить информацию о new_article, проверить БД.Если ссылка уже существует, я просто хочу отправить шаблону сообщение о том, что ссылка уже существует.