首页 > 解决方案 > 返回错误无 Django html 响应?

问题描述

我正在尝试在 Django 中制作待办事项应用程序,每当我在字符串或日期中输入日期时,它都不会向待办事项列表应用程序返回任何内容

模型.py

from django.db import models
from django.contrib.auth.models import User
# Create your models here.


class Task(models.Model):
    user = models.ForeignKey(
        User, on_delete=models.CASCADE, null=True, blank=True)
    title = models.CharField(max_length=200)
    description = models.TextField(null=True, blank=True)
    complete = models.BooleanField(default=False)
    created = models.DateTimeField(auto_now_add=True)
    deadline = models.CharField(max_length=200)

    def __str__(self):
        return f'{self.title}  {self.deadline}'

    class Meta:
        order_with_respect_to = 'user'

task_list.html

{% extends 'base/main.html' %} {% block content %}

<script src="https://cdn.jsdelivr.net/npm/sortablejs@latest/Sortable.min.js"></script>
<div class="header-bar">
    <div>
        <h1>Hello {{request.user|title}}</h1>
        <h3 style="margin:0">You have <i>{{count}}</i> incomplete task{{ count|pluralize:"s" }}</h3>
    </div>

    {% if request.user.is_authenticated %}
    <a href="{% url 'logout' %}">Logout</a> {% else %}
    <a href="{% url 'login' %}">Login</a> {% endif %}
</div>


<div id="search-add-wrapper">
    <form method="GET" style="display: flex;">
        <input type='text' name='search-area' placeholder="Search your task" value="{{search_input}}">
        <input class="button" type="submit" value='Search'>
    </form>
    {% if tasks|length > 0 %}
    <a id="add-link" href="{% url 'task-create' %}">&#x2b;</a>
    {% endif %}
</div>


<!-- Hidden form. Form submits new item positions -->
<form style="display: none;" id="reorderForm" method="post" action="{% url 'task-reorder' %}">
    {% csrf_token %}
    <input type="hidden" id="positionInput" name="position">
</form>


<div id="tasklist" class="task-items-wrapper">
    {% for task in tasks %}
    <div class="task-wrapper" data-position="{{task.pk}}">
        <div class="task-title">
            {% if task.complete %}
            <div class="task-complete-icon"></div>
            <i><s><a href="{% url 'task-update' task.id %}">{{task}} - {{task.deadline}}</a></s></i>

            {% else %}
            <div class="task-incomplete-icon"></div>
            <a href="{% url 'task-update' task.id %}">{{task}} - {{task.deadline}}</a> {% endif %}
        </div>
        <div class="task-controls">
            <a class="delete-link" href="{% url 'task-delete' task.id %}">&#215;</a>
            <span class="handle">&nbsp;&#10247;</span>
        </div>
    </div>

    {% empty %}
    <div style="text-align: center; padding-bottom: 10px; line-height: 1em;">
        <h3>No new tasks are created.</h3>
        <h3>Create a <a style="text-decoration: none; color: #e53935;" href="{% url 'task-create' %}">New task</a> ! </h3>
    </div>
    {% endfor %}
</div>

<script>
    var taskList = document.getElementById("tasklist");
    var reorderForm = document.getElementById("reorderForm");
    var positionInput = document.getElementById("positionInput");

    let sortable = Sortable.create(taskList, {
        handle: '.handle',
        ghostClass: 'dropArea',
        chosenClass: 'selectedTask',

    });

    function reordering() {
        const rows = document.getElementsByClassName("task-wrapper");
        let pos = [];
        for (let row of rows) {
            pos.push(row.dataset.position);
        }
        console.log(pos.join(","))
        positionInput.value = pos.join(',');
        reorderForm.submit();
    }

    document.ondrop = reordering
</script>

{% endblock content %}

task_form.html

{% extends 'base/main.html' %}
{% block content %}

<div class="header-bar">
    <a href="{% url 'tasks' %}">&#8592; Back</a>
</div>


<div class="card-body">
    <form method="POST" action="">
        {% csrf_token %}
        {{form.as_p}}
        <input class="button" type="submit" value="Submit">
    </form>
</div>


{% endblock content %}

视图.py

from django.shortcuts import render, redirect
from django.views.generic.list import ListView
from django.views.generic.detail import DetailView
from django.views.generic.edit import CreateView, UpdateView, DeleteView, FormView
from django.urls import reverse_lazy

from django.contrib.auth.views import LoginView
from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth import login

# Imports for Reordering Feature
from django.views import View
from django.shortcuts import redirect
from django.db import transaction

from .models import Task
from .forms import PositionForm


class CustomLoginView(LoginView):
    template_name = 'base/login.html'
    fields = '__all__'
    redirect_authenticated_user = True

    def get_success_url(self):
        return reverse_lazy('tasks')


class RegisterPage(FormView):
    template_name = 'base/register.html'
    form_class = UserCreationForm
    redirect_authenticated_user = True
    success_url = reverse_lazy('tasks')

    def form_valid(self, form):
        user = form.save()
        if user is not None:
            login(self.request, user)
        return super(RegisterPage, self).form_valid(form)

    def get(self, *args, **kwargs):
        if self.request.user.is_authenticated:
            return redirect('tasks')
        return super(RegisterPage, self).get(*args, **kwargs)


class TaskList(LoginRequiredMixin, ListView):
    model = Task
    context_object_name = 'tasks'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['tasks'] = context['tasks'].filter(user=self.request.user)
        context['count'] = context['tasks'].filter(complete=False).count()

        search_input = self.request.GET.get('search-area') or ''
        if search_input:
            context['tasks'] = context['tasks'].filter(
                title__contains=search_input)

        context['search_input'] = search_input

        return context


class TaskDetail(LoginRequiredMixin, DetailView):
    model = Task
    context_object_name = 'task'
    template_name = 'base/task.html'


class TaskCreate(LoginRequiredMixin, CreateView):
    model = Task
    fields = ['title', 'description', 'complete', 'deadline']
    success_url = reverse_lazy('tasks')

    def form_valid(self, form):
        form.instance.user = self.request.user
        return super(TaskCreate, self).form_valid(form)


class TaskUpdate(LoginRequiredMixin, UpdateView):
    model = Task
    fields = ['title', 'description', 'complete', 'deadline']
    success_url = reverse_lazy('tasks')


class DeleteView(LoginRequiredMixin, DeleteView):
    model = Task
    context_object_name = 'task'
    success_url = reverse_lazy('tasks')
    def get_queryset(self):
        owner = self.request.user
        return self.model.objects.filter(user=owner)

class TaskReorder(View):
    def post(self, request):
        form = PositionForm(request.POST)

        if form.is_valid():
            positionList = form.cleaned_data["position"].split(',')

            with transaction.atomic():
                self.request.user.set_task_order(positionList)

        return redirect(reverse_lazy('tasks'))

有谁知道如何作为约会返回?为什么它没有返回?在待办事项列表上可能不会发布结果?D 你认为是意见有问题吗?

结果待办事项清单

标签: htmldjangoformsdjango-rest-frameworkdjango-views

解决方案


推荐阅读