我用ajax创建“like button”。我的网址有问题。
当我点击时,我有404:网址:http://127.0.0.1:8000/questions/get/1/%7B%%20url%20'add_like'%20 %% 7D
我不知道这段代码有什么问题
服务器控制台响应:POST / questions / get / 1 /%7B %% 20url%20'add_like'%20 %% 7D HTTP / 1.1“404 3710
我在测试视图的顶部添加了一些打印功能,视图不起作用
我认为问题并不复杂,但我不明白我的网址有什么问题
也许你可以给我建议,我该如何测试这个问题
模型:
class Answer(models.Model):
text = models.TextField()
date = models.DateTimeField(default=datetime.datetime.now)
author = models.ForeignKey(CustomUser)
question = models.ForeignKey(Question)
like = models.PositiveIntegerField(default=0)
视图:
def add_like(request):
if request.POST:
answer_pk = request.POST.get('answer_pk')
new_like = Answer.objects.get(pk=answer_pk)
new_like.like += 1
new_like.save()
return HttpResponse()
简短形式的HTML:
{% for answer in answers %}
<input type="button" name="{{ answer.pk }}" value="Like" class="addLike" />
{% endfor %}
AJAX:
$('.addLike').click(function(){
$.ajax({
type: "POST",
url: "{% url 'add_like' %}",
data: {'answer_pk': $(this).attr('name'), 'csrfmiddlewaretoken': '{{ csrf_token }}'},
dataType: "json",
});
})
和简短形式的网址:
项目/ URL:
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^questions/', include('apps.questions.urls')),]
应用/问题/网址
urlpatterns = [
url(r'get/(?P<question_pk>[0-9]+)/$', views.get_question, name='get_question'),
url(r'add_answer/(?P<question_pk>[0-9]+)/$', views.add_answer, name='add_answer'),
url(r'add_like/$', views.add_like, name='add_like'),]
答案 0 :(得分:1)
您的ajax是否包含在Django模板中,还是在单独的文件中?看起来你的ajax代码中的URL标记{%url'add_like'%}没有被Django转换为实际的URL。 Django标签只有在模板中才有效。假设这是问题所在,您可以将ajax代码放在模板中的HTML脚本标记内,以便Django可以转换URL。