Python Django:在提交表单时获取NoReverseMatch,URL有Slug

Python Django:在提交表单时获取NoReverseMatch,URL有Slug,python,django,Python,Django,我通过构建一个名为TravelBuddies的应用程序来学习Django。它将允许旅行者计划他们的旅行,保存相关的旅行项目(如预订、机票、护照副本、保险信息等),并为日常活动创建警报。该应用程序还能够向旅行者更新当地信息,如天气或每日新闻。旅行者还可以与他人共享旅行信息,或与他人合作计划旅行 我面临一个问题。我有一张这样的表格: 当我点击提交按钮时,我应该被重定向到。相反,我得到了以下错误: NoReverseMatch at /addactivity/ Reverse for 'activi

我通过构建一个名为TravelBuddies的应用程序来学习Django。它将允许旅行者计划他们的旅行,保存相关的旅行项目(如预订、机票、护照副本、保险信息等),并为日常活动创建警报。该应用程序还能够向旅行者更新当地信息,如天气或每日新闻。旅行者还可以与他人共享旅行信息,或与他人合作计划旅行

我面临一个问题。我有一张这样的表格:

当我点击提交按钮时,我应该被重定向到。相反,我得到了以下错误:

NoReverseMatch at /addactivity/
Reverse for 'activity' with no arguments not found. 1 pattern(s) tried: ['triplist/(?P<slug>[-a-zA-Z0-9_]+)/$']
Request Method: POST
Request URL:    http://127.0.0.1:8000/addactivity/
Django Version: 3.0
Exception Type: NoReverseMatch
Exception Value:    
Reverse for 'activity' with no arguments not found. 1 pattern(s) tried: ['triplist/(?P<slug>[-a-zA-Z0-9_]+)/$']
以下是我在
views.pyTrips文件夹中的代码:

from django.contrib.auth.models import User
from django.db import models
from django.template.defaultfilters import slugify

# Create your models here.
class Trip(models.Model):
    trip_name = models.CharField(max_length=100)
    date = models.DateField()
    planner_name = models.CharField(max_length=100)
    add_coplanner = models.ManyToManyField(User)
    trip_description = models.CharField(max_length=1000, default='null')
    slug = models.SlugField(max_length=150, default='null')

    def __str__(self):
        return self.trip_name

    def save(self, *args, **kwargs):
        self.slug = slugify(self.trip_name)
        super().save(*args, **kwargs)

class Activity(models.Model):
    trip = models.ForeignKey(Trip, on_delete=models.CASCADE)
    activity_name = models.CharField(max_length=100)
    date = models.DateField()
    time = models.TimeField()
    location = models.CharField(max_length=100)
    activity_description = models.CharField(max_length=1000, default='null')
    item_type = models.CharField(max_length=100)
    item_number = models.CharField(max_length=100)
    add_cotraveller = models.ManyToManyField(User)
    slug = models.SlugField(max_length=150, default='null')


    def __str__(self):
        return self.activity_name

    def save(self):
        super(Activity, self).save()
        self.slug = '%i-%s' % (
            self.id, slugify(self.trip.trip_name)
        )
        super(Activity, self).save()
from django.views import generic
from .models import Trip, Activity


class TripListView(generic.ListView):
    template_name = 'trips/triplist.html'
    context_object_name = 'all_trips'

    def get_queryset(self):
        return Trip.objects.all()


class ActivityView(generic.DetailView):
    model = Trip
    template_name = 'trips/activity.html'
from . import views
from django.urls import path

app_name = 'trips'

urlpatterns = [
    path('triplist/', views.TripListView.as_view(), name='triplist'),
    path('triplist/<slug:slug>/', views.ActivityView.as_view(), name='activity'),
]
from django.apps import AppConfig


class TripsConfig(AppConfig):
    name = 'trips'
from django.apps import AppConfig


class AddactivityConfig(AppConfig):
    name = 'addactivity'
from django.forms import ModelForm
from trips.models import Activity

class ActivityForm(ModelForm):
    class Meta:
        model = Activity
        fields = ['trip', 'activity_name', 'date', 'time', 'location', 'activity_description', 'item_type', 'item_number', 'add_cotraveller']
from django.forms import ModelForm
from trips.models import Activity

class ActivityForm(ModelForm):
    class Meta:
        model = Activity
        fields = ['trip', 'activity_name', 'date', 'time', 'location', 'activity_description', 'item_type', 'item_number', 'add_cotraveller']
from . import views
from django.urls import path

app_name = 'addactivity'

urlpatterns = [
    path('addactivity/', views.AddActivityFormView.as_view(), name='addactivity'),
from django.shortcuts import render
from django.views.generic import TemplateView
from .forms import ActivityForm
from trips.models import Activity
from django.http import HttpResponseRedirect
from django.urls import reverse

# Create your views here.


class AddActivityFormView(TemplateView):
    template_name = 'addactivity/addactivityform.html'

    def get(self, request):
        form = ActivityForm()
        activities = Activity.objects.all()
        args = {'form': form, 'activities': activities}
        return render(request, self.template_name, args)

    def post(self, request):
        form = ActivityForm(request.POST)
        if form.is_valid():
            form.save()
            trip = form.cleaned_data['trip']
            activity_name = form.cleaned_data['activity_name']
            date = form.cleaned_data['date']
            time = form.cleaned_data['time']
            location = form.cleaned_data['location']
            activity_description = form.cleaned_data['activity_description']
            item_type = form.cleaned_data['item_type']
            item_number = form.cleaned_data['item_number']
            add_cotraveller = form.cleaned_data['add_cotraveller']

            args = {'form': form, 'trip': trip, 'activity_name': activity_name, 'date': date, 'time': time, 'location': location, 'activity_description': activity_description, 'item_type': item_type, 'item_number': item_number, 'add_cotraveller': add_cotraveller}
            return HttpResponseRedirect(reverse('trips:activity'))
{% extends 'base.html' %}
{% load static %}

{% block title %} Add Activity {% endblock %}

{% block content %}

<div class="container">
    <h2>Add New Activity</h2>
    <form method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Submit</button>
    </form>
</div>

{% endblock %}
以下是我在
urls.pyTrips文件夹中的代码:

from django.contrib.auth.models import User
from django.db import models
from django.template.defaultfilters import slugify

# Create your models here.
class Trip(models.Model):
    trip_name = models.CharField(max_length=100)
    date = models.DateField()
    planner_name = models.CharField(max_length=100)
    add_coplanner = models.ManyToManyField(User)
    trip_description = models.CharField(max_length=1000, default='null')
    slug = models.SlugField(max_length=150, default='null')

    def __str__(self):
        return self.trip_name

    def save(self, *args, **kwargs):
        self.slug = slugify(self.trip_name)
        super().save(*args, **kwargs)

class Activity(models.Model):
    trip = models.ForeignKey(Trip, on_delete=models.CASCADE)
    activity_name = models.CharField(max_length=100)
    date = models.DateField()
    time = models.TimeField()
    location = models.CharField(max_length=100)
    activity_description = models.CharField(max_length=1000, default='null')
    item_type = models.CharField(max_length=100)
    item_number = models.CharField(max_length=100)
    add_cotraveller = models.ManyToManyField(User)
    slug = models.SlugField(max_length=150, default='null')


    def __str__(self):
        return self.activity_name

    def save(self):
        super(Activity, self).save()
        self.slug = '%i-%s' % (
            self.id, slugify(self.trip.trip_name)
        )
        super(Activity, self).save()
from django.views import generic
from .models import Trip, Activity


class TripListView(generic.ListView):
    template_name = 'trips/triplist.html'
    context_object_name = 'all_trips'

    def get_queryset(self):
        return Trip.objects.all()


class ActivityView(generic.DetailView):
    model = Trip
    template_name = 'trips/activity.html'
from . import views
from django.urls import path

app_name = 'trips'

urlpatterns = [
    path('triplist/', views.TripListView.as_view(), name='triplist'),
    path('triplist/<slug:slug>/', views.ActivityView.as_view(), name='activity'),
]
from django.apps import AppConfig


class TripsConfig(AppConfig):
    name = 'trips'
from django.apps import AppConfig


class AddactivityConfig(AppConfig):
    name = 'addactivity'
from django.forms import ModelForm
from trips.models import Activity

class ActivityForm(ModelForm):
    class Meta:
        model = Activity
        fields = ['trip', 'activity_name', 'date', 'time', 'location', 'activity_description', 'item_type', 'item_number', 'add_cotraveller']
from django.forms import ModelForm
from trips.models import Activity

class ActivityForm(ModelForm):
    class Meta:
        model = Activity
        fields = ['trip', 'activity_name', 'date', 'time', 'location', 'activity_description', 'item_type', 'item_number', 'add_cotraveller']
from . import views
from django.urls import path

app_name = 'addactivity'

urlpatterns = [
    path('addactivity/', views.AddActivityFormView.as_view(), name='addactivity'),
from django.shortcuts import render
from django.views.generic import TemplateView
from .forms import ActivityForm
from trips.models import Activity
from django.http import HttpResponseRedirect
from django.urls import reverse

# Create your views here.


class AddActivityFormView(TemplateView):
    template_name = 'addactivity/addactivityform.html'

    def get(self, request):
        form = ActivityForm()
        activities = Activity.objects.all()
        args = {'form': form, 'activities': activities}
        return render(request, self.template_name, args)

    def post(self, request):
        form = ActivityForm(request.POST)
        if form.is_valid():
            form.save()
            trip = form.cleaned_data['trip']
            activity_name = form.cleaned_data['activity_name']
            date = form.cleaned_data['date']
            time = form.cleaned_data['time']
            location = form.cleaned_data['location']
            activity_description = form.cleaned_data['activity_description']
            item_type = form.cleaned_data['item_type']
            item_number = form.cleaned_data['item_number']
            add_cotraveller = form.cleaned_data['add_cotraveller']

            args = {'form': form, 'trip': trip, 'activity_name': activity_name, 'date': date, 'time': time, 'location': location, 'activity_description': activity_description, 'item_type': item_type, 'item_number': item_number, 'add_cotraveller': add_cotraveller}
            return HttpResponseRedirect(reverse('trips:activity'))
{% extends 'base.html' %}
{% load static %}

{% block title %} Add Activity {% endblock %}

{% block content %}

<div class="container">
    <h2>Add New Activity</h2>
    <form method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Submit</button>
    </form>
</div>

{% endblock %}
以下是我在
apps.pyaddactivity文件夹中的代码:

from django.contrib.auth.models import User
from django.db import models
from django.template.defaultfilters import slugify

# Create your models here.
class Trip(models.Model):
    trip_name = models.CharField(max_length=100)
    date = models.DateField()
    planner_name = models.CharField(max_length=100)
    add_coplanner = models.ManyToManyField(User)
    trip_description = models.CharField(max_length=1000, default='null')
    slug = models.SlugField(max_length=150, default='null')

    def __str__(self):
        return self.trip_name

    def save(self, *args, **kwargs):
        self.slug = slugify(self.trip_name)
        super().save(*args, **kwargs)

class Activity(models.Model):
    trip = models.ForeignKey(Trip, on_delete=models.CASCADE)
    activity_name = models.CharField(max_length=100)
    date = models.DateField()
    time = models.TimeField()
    location = models.CharField(max_length=100)
    activity_description = models.CharField(max_length=1000, default='null')
    item_type = models.CharField(max_length=100)
    item_number = models.CharField(max_length=100)
    add_cotraveller = models.ManyToManyField(User)
    slug = models.SlugField(max_length=150, default='null')


    def __str__(self):
        return self.activity_name

    def save(self):
        super(Activity, self).save()
        self.slug = '%i-%s' % (
            self.id, slugify(self.trip.trip_name)
        )
        super(Activity, self).save()
from django.views import generic
from .models import Trip, Activity


class TripListView(generic.ListView):
    template_name = 'trips/triplist.html'
    context_object_name = 'all_trips'

    def get_queryset(self):
        return Trip.objects.all()


class ActivityView(generic.DetailView):
    model = Trip
    template_name = 'trips/activity.html'
from . import views
from django.urls import path

app_name = 'trips'

urlpatterns = [
    path('triplist/', views.TripListView.as_view(), name='triplist'),
    path('triplist/<slug:slug>/', views.ActivityView.as_view(), name='activity'),
]
from django.apps import AppConfig


class TripsConfig(AppConfig):
    name = 'trips'
from django.apps import AppConfig


class AddactivityConfig(AppConfig):
    name = 'addactivity'
from django.forms import ModelForm
from trips.models import Activity

class ActivityForm(ModelForm):
    class Meta:
        model = Activity
        fields = ['trip', 'activity_name', 'date', 'time', 'location', 'activity_description', 'item_type', 'item_number', 'add_cotraveller']
from django.forms import ModelForm
from trips.models import Activity

class ActivityForm(ModelForm):
    class Meta:
        model = Activity
        fields = ['trip', 'activity_name', 'date', 'time', 'location', 'activity_description', 'item_type', 'item_number', 'add_cotraveller']
from . import views
from django.urls import path

app_name = 'addactivity'

urlpatterns = [
    path('addactivity/', views.AddActivityFormView.as_view(), name='addactivity'),
from django.shortcuts import render
from django.views.generic import TemplateView
from .forms import ActivityForm
from trips.models import Activity
from django.http import HttpResponseRedirect
from django.urls import reverse

# Create your views here.


class AddActivityFormView(TemplateView):
    template_name = 'addactivity/addactivityform.html'

    def get(self, request):
        form = ActivityForm()
        activities = Activity.objects.all()
        args = {'form': form, 'activities': activities}
        return render(request, self.template_name, args)

    def post(self, request):
        form = ActivityForm(request.POST)
        if form.is_valid():
            form.save()
            trip = form.cleaned_data['trip']
            activity_name = form.cleaned_data['activity_name']
            date = form.cleaned_data['date']
            time = form.cleaned_data['time']
            location = form.cleaned_data['location']
            activity_description = form.cleaned_data['activity_description']
            item_type = form.cleaned_data['item_type']
            item_number = form.cleaned_data['item_number']
            add_cotraveller = form.cleaned_data['add_cotraveller']

            args = {'form': form, 'trip': trip, 'activity_name': activity_name, 'date': date, 'time': time, 'location': location, 'activity_description': activity_description, 'item_type': item_type, 'item_number': item_number, 'add_cotraveller': add_cotraveller}
            return HttpResponseRedirect(reverse('trips:activity'))
{% extends 'base.html' %}
{% load static %}

{% block title %} Add Activity {% endblock %}

{% block content %}

<div class="container">
    <h2>Add New Activity</h2>
    <form method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Submit</button>
    </form>
</div>

{% endblock %}
以下是我在
forms.pyaddactivity文件夹中的代码:

from django.contrib.auth.models import User
from django.db import models
from django.template.defaultfilters import slugify

# Create your models here.
class Trip(models.Model):
    trip_name = models.CharField(max_length=100)
    date = models.DateField()
    planner_name = models.CharField(max_length=100)
    add_coplanner = models.ManyToManyField(User)
    trip_description = models.CharField(max_length=1000, default='null')
    slug = models.SlugField(max_length=150, default='null')

    def __str__(self):
        return self.trip_name

    def save(self, *args, **kwargs):
        self.slug = slugify(self.trip_name)
        super().save(*args, **kwargs)

class Activity(models.Model):
    trip = models.ForeignKey(Trip, on_delete=models.CASCADE)
    activity_name = models.CharField(max_length=100)
    date = models.DateField()
    time = models.TimeField()
    location = models.CharField(max_length=100)
    activity_description = models.CharField(max_length=1000, default='null')
    item_type = models.CharField(max_length=100)
    item_number = models.CharField(max_length=100)
    add_cotraveller = models.ManyToManyField(User)
    slug = models.SlugField(max_length=150, default='null')


    def __str__(self):
        return self.activity_name

    def save(self):
        super(Activity, self).save()
        self.slug = '%i-%s' % (
            self.id, slugify(self.trip.trip_name)
        )
        super(Activity, self).save()
from django.views import generic
from .models import Trip, Activity


class TripListView(generic.ListView):
    template_name = 'trips/triplist.html'
    context_object_name = 'all_trips'

    def get_queryset(self):
        return Trip.objects.all()


class ActivityView(generic.DetailView):
    model = Trip
    template_name = 'trips/activity.html'
from . import views
from django.urls import path

app_name = 'trips'

urlpatterns = [
    path('triplist/', views.TripListView.as_view(), name='triplist'),
    path('triplist/<slug:slug>/', views.ActivityView.as_view(), name='activity'),
]
from django.apps import AppConfig


class TripsConfig(AppConfig):
    name = 'trips'
from django.apps import AppConfig


class AddactivityConfig(AppConfig):
    name = 'addactivity'
from django.forms import ModelForm
from trips.models import Activity

class ActivityForm(ModelForm):
    class Meta:
        model = Activity
        fields = ['trip', 'activity_name', 'date', 'time', 'location', 'activity_description', 'item_type', 'item_number', 'add_cotraveller']
from django.forms import ModelForm
from trips.models import Activity

class ActivityForm(ModelForm):
    class Meta:
        model = Activity
        fields = ['trip', 'activity_name', 'date', 'time', 'location', 'activity_description', 'item_type', 'item_number', 'add_cotraveller']
from . import views
from django.urls import path

app_name = 'addactivity'

urlpatterns = [
    path('addactivity/', views.AddActivityFormView.as_view(), name='addactivity'),
from django.shortcuts import render
from django.views.generic import TemplateView
from .forms import ActivityForm
from trips.models import Activity
from django.http import HttpResponseRedirect
from django.urls import reverse

# Create your views here.


class AddActivityFormView(TemplateView):
    template_name = 'addactivity/addactivityform.html'

    def get(self, request):
        form = ActivityForm()
        activities = Activity.objects.all()
        args = {'form': form, 'activities': activities}
        return render(request, self.template_name, args)

    def post(self, request):
        form = ActivityForm(request.POST)
        if form.is_valid():
            form.save()
            trip = form.cleaned_data['trip']
            activity_name = form.cleaned_data['activity_name']
            date = form.cleaned_data['date']
            time = form.cleaned_data['time']
            location = form.cleaned_data['location']
            activity_description = form.cleaned_data['activity_description']
            item_type = form.cleaned_data['item_type']
            item_number = form.cleaned_data['item_number']
            add_cotraveller = form.cleaned_data['add_cotraveller']

            args = {'form': form, 'trip': trip, 'activity_name': activity_name, 'date': date, 'time': time, 'location': location, 'activity_description': activity_description, 'item_type': item_type, 'item_number': item_number, 'add_cotraveller': add_cotraveller}
            return HttpResponseRedirect(reverse('trips:activity'))
{% extends 'base.html' %}
{% load static %}

{% block title %} Add Activity {% endblock %}

{% block content %}

<div class="container">
    <h2>Add New Activity</h2>
    <form method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Submit</button>
    </form>
</div>

{% endblock %}
以下是我在
forms.pyaddactivity文件夹中的代码:

from django.contrib.auth.models import User
from django.db import models
from django.template.defaultfilters import slugify

# Create your models here.
class Trip(models.Model):
    trip_name = models.CharField(max_length=100)
    date = models.DateField()
    planner_name = models.CharField(max_length=100)
    add_coplanner = models.ManyToManyField(User)
    trip_description = models.CharField(max_length=1000, default='null')
    slug = models.SlugField(max_length=150, default='null')

    def __str__(self):
        return self.trip_name

    def save(self, *args, **kwargs):
        self.slug = slugify(self.trip_name)
        super().save(*args, **kwargs)

class Activity(models.Model):
    trip = models.ForeignKey(Trip, on_delete=models.CASCADE)
    activity_name = models.CharField(max_length=100)
    date = models.DateField()
    time = models.TimeField()
    location = models.CharField(max_length=100)
    activity_description = models.CharField(max_length=1000, default='null')
    item_type = models.CharField(max_length=100)
    item_number = models.CharField(max_length=100)
    add_cotraveller = models.ManyToManyField(User)
    slug = models.SlugField(max_length=150, default='null')


    def __str__(self):
        return self.activity_name

    def save(self):
        super(Activity, self).save()
        self.slug = '%i-%s' % (
            self.id, slugify(self.trip.trip_name)
        )
        super(Activity, self).save()
from django.views import generic
from .models import Trip, Activity


class TripListView(generic.ListView):
    template_name = 'trips/triplist.html'
    context_object_name = 'all_trips'

    def get_queryset(self):
        return Trip.objects.all()


class ActivityView(generic.DetailView):
    model = Trip
    template_name = 'trips/activity.html'
from . import views
from django.urls import path

app_name = 'trips'

urlpatterns = [
    path('triplist/', views.TripListView.as_view(), name='triplist'),
    path('triplist/<slug:slug>/', views.ActivityView.as_view(), name='activity'),
]
from django.apps import AppConfig


class TripsConfig(AppConfig):
    name = 'trips'
from django.apps import AppConfig


class AddactivityConfig(AppConfig):
    name = 'addactivity'
from django.forms import ModelForm
from trips.models import Activity

class ActivityForm(ModelForm):
    class Meta:
        model = Activity
        fields = ['trip', 'activity_name', 'date', 'time', 'location', 'activity_description', 'item_type', 'item_number', 'add_cotraveller']
from django.forms import ModelForm
from trips.models import Activity

class ActivityForm(ModelForm):
    class Meta:
        model = Activity
        fields = ['trip', 'activity_name', 'date', 'time', 'location', 'activity_description', 'item_type', 'item_number', 'add_cotraveller']
from . import views
from django.urls import path

app_name = 'addactivity'

urlpatterns = [
    path('addactivity/', views.AddActivityFormView.as_view(), name='addactivity'),
from django.shortcuts import render
from django.views.generic import TemplateView
from .forms import ActivityForm
from trips.models import Activity
from django.http import HttpResponseRedirect
from django.urls import reverse

# Create your views here.


class AddActivityFormView(TemplateView):
    template_name = 'addactivity/addactivityform.html'

    def get(self, request):
        form = ActivityForm()
        activities = Activity.objects.all()
        args = {'form': form, 'activities': activities}
        return render(request, self.template_name, args)

    def post(self, request):
        form = ActivityForm(request.POST)
        if form.is_valid():
            form.save()
            trip = form.cleaned_data['trip']
            activity_name = form.cleaned_data['activity_name']
            date = form.cleaned_data['date']
            time = form.cleaned_data['time']
            location = form.cleaned_data['location']
            activity_description = form.cleaned_data['activity_description']
            item_type = form.cleaned_data['item_type']
            item_number = form.cleaned_data['item_number']
            add_cotraveller = form.cleaned_data['add_cotraveller']

            args = {'form': form, 'trip': trip, 'activity_name': activity_name, 'date': date, 'time': time, 'location': location, 'activity_description': activity_description, 'item_type': item_type, 'item_number': item_number, 'add_cotraveller': add_cotraveller}
            return HttpResponseRedirect(reverse('trips:activity'))
{% extends 'base.html' %}
{% load static %}

{% block title %} Add Activity {% endblock %}

{% block content %}

<div class="container">
    <h2>Add New Activity</h2>
    <form method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Submit</button>
    </form>
</div>

{% endblock %}
以下是我在
url.pyaddactivity文件夹中的代码:

from django.contrib.auth.models import User
from django.db import models
from django.template.defaultfilters import slugify

# Create your models here.
class Trip(models.Model):
    trip_name = models.CharField(max_length=100)
    date = models.DateField()
    planner_name = models.CharField(max_length=100)
    add_coplanner = models.ManyToManyField(User)
    trip_description = models.CharField(max_length=1000, default='null')
    slug = models.SlugField(max_length=150, default='null')

    def __str__(self):
        return self.trip_name

    def save(self, *args, **kwargs):
        self.slug = slugify(self.trip_name)
        super().save(*args, **kwargs)

class Activity(models.Model):
    trip = models.ForeignKey(Trip, on_delete=models.CASCADE)
    activity_name = models.CharField(max_length=100)
    date = models.DateField()
    time = models.TimeField()
    location = models.CharField(max_length=100)
    activity_description = models.CharField(max_length=1000, default='null')
    item_type = models.CharField(max_length=100)
    item_number = models.CharField(max_length=100)
    add_cotraveller = models.ManyToManyField(User)
    slug = models.SlugField(max_length=150, default='null')


    def __str__(self):
        return self.activity_name

    def save(self):
        super(Activity, self).save()
        self.slug = '%i-%s' % (
            self.id, slugify(self.trip.trip_name)
        )
        super(Activity, self).save()
from django.views import generic
from .models import Trip, Activity


class TripListView(generic.ListView):
    template_name = 'trips/triplist.html'
    context_object_name = 'all_trips'

    def get_queryset(self):
        return Trip.objects.all()


class ActivityView(generic.DetailView):
    model = Trip
    template_name = 'trips/activity.html'
from . import views
from django.urls import path

app_name = 'trips'

urlpatterns = [
    path('triplist/', views.TripListView.as_view(), name='triplist'),
    path('triplist/<slug:slug>/', views.ActivityView.as_view(), name='activity'),
]
from django.apps import AppConfig


class TripsConfig(AppConfig):
    name = 'trips'
from django.apps import AppConfig


class AddactivityConfig(AppConfig):
    name = 'addactivity'
from django.forms import ModelForm
from trips.models import Activity

class ActivityForm(ModelForm):
    class Meta:
        model = Activity
        fields = ['trip', 'activity_name', 'date', 'time', 'location', 'activity_description', 'item_type', 'item_number', 'add_cotraveller']
from django.forms import ModelForm
from trips.models import Activity

class ActivityForm(ModelForm):
    class Meta:
        model = Activity
        fields = ['trip', 'activity_name', 'date', 'time', 'location', 'activity_description', 'item_type', 'item_number', 'add_cotraveller']
from . import views
from django.urls import path

app_name = 'addactivity'

urlpatterns = [
    path('addactivity/', views.AddActivityFormView.as_view(), name='addactivity'),
from django.shortcuts import render
from django.views.generic import TemplateView
from .forms import ActivityForm
from trips.models import Activity
from django.http import HttpResponseRedirect
from django.urls import reverse

# Create your views here.


class AddActivityFormView(TemplateView):
    template_name = 'addactivity/addactivityform.html'

    def get(self, request):
        form = ActivityForm()
        activities = Activity.objects.all()
        args = {'form': form, 'activities': activities}
        return render(request, self.template_name, args)

    def post(self, request):
        form = ActivityForm(request.POST)
        if form.is_valid():
            form.save()
            trip = form.cleaned_data['trip']
            activity_name = form.cleaned_data['activity_name']
            date = form.cleaned_data['date']
            time = form.cleaned_data['time']
            location = form.cleaned_data['location']
            activity_description = form.cleaned_data['activity_description']
            item_type = form.cleaned_data['item_type']
            item_number = form.cleaned_data['item_number']
            add_cotraveller = form.cleaned_data['add_cotraveller']

            args = {'form': form, 'trip': trip, 'activity_name': activity_name, 'date': date, 'time': time, 'location': location, 'activity_description': activity_description, 'item_type': item_type, 'item_number': item_number, 'add_cotraveller': add_cotraveller}
            return HttpResponseRedirect(reverse('trips:activity'))
{% extends 'base.html' %}
{% load static %}

{% block title %} Add Activity {% endblock %}

{% block content %}

<div class="container">
    <h2>Add New Activity</h2>
    <form method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Submit</button>
    </form>
</div>

{% endblock %}
]

以下是我在
views.pyaddactivity文件夹中的代码:

from django.contrib.auth.models import User
from django.db import models
from django.template.defaultfilters import slugify

# Create your models here.
class Trip(models.Model):
    trip_name = models.CharField(max_length=100)
    date = models.DateField()
    planner_name = models.CharField(max_length=100)
    add_coplanner = models.ManyToManyField(User)
    trip_description = models.CharField(max_length=1000, default='null')
    slug = models.SlugField(max_length=150, default='null')

    def __str__(self):
        return self.trip_name

    def save(self, *args, **kwargs):
        self.slug = slugify(self.trip_name)
        super().save(*args, **kwargs)

class Activity(models.Model):
    trip = models.ForeignKey(Trip, on_delete=models.CASCADE)
    activity_name = models.CharField(max_length=100)
    date = models.DateField()
    time = models.TimeField()
    location = models.CharField(max_length=100)
    activity_description = models.CharField(max_length=1000, default='null')
    item_type = models.CharField(max_length=100)
    item_number = models.CharField(max_length=100)
    add_cotraveller = models.ManyToManyField(User)
    slug = models.SlugField(max_length=150, default='null')


    def __str__(self):
        return self.activity_name

    def save(self):
        super(Activity, self).save()
        self.slug = '%i-%s' % (
            self.id, slugify(self.trip.trip_name)
        )
        super(Activity, self).save()
from django.views import generic
from .models import Trip, Activity


class TripListView(generic.ListView):
    template_name = 'trips/triplist.html'
    context_object_name = 'all_trips'

    def get_queryset(self):
        return Trip.objects.all()


class ActivityView(generic.DetailView):
    model = Trip
    template_name = 'trips/activity.html'
from . import views
from django.urls import path

app_name = 'trips'

urlpatterns = [
    path('triplist/', views.TripListView.as_view(), name='triplist'),
    path('triplist/<slug:slug>/', views.ActivityView.as_view(), name='activity'),
]
from django.apps import AppConfig


class TripsConfig(AppConfig):
    name = 'trips'
from django.apps import AppConfig


class AddactivityConfig(AppConfig):
    name = 'addactivity'
from django.forms import ModelForm
from trips.models import Activity

class ActivityForm(ModelForm):
    class Meta:
        model = Activity
        fields = ['trip', 'activity_name', 'date', 'time', 'location', 'activity_description', 'item_type', 'item_number', 'add_cotraveller']
from django.forms import ModelForm
from trips.models import Activity

class ActivityForm(ModelForm):
    class Meta:
        model = Activity
        fields = ['trip', 'activity_name', 'date', 'time', 'location', 'activity_description', 'item_type', 'item_number', 'add_cotraveller']
from . import views
from django.urls import path

app_name = 'addactivity'

urlpatterns = [
    path('addactivity/', views.AddActivityFormView.as_view(), name='addactivity'),
from django.shortcuts import render
from django.views.generic import TemplateView
from .forms import ActivityForm
from trips.models import Activity
from django.http import HttpResponseRedirect
from django.urls import reverse

# Create your views here.


class AddActivityFormView(TemplateView):
    template_name = 'addactivity/addactivityform.html'

    def get(self, request):
        form = ActivityForm()
        activities = Activity.objects.all()
        args = {'form': form, 'activities': activities}
        return render(request, self.template_name, args)

    def post(self, request):
        form = ActivityForm(request.POST)
        if form.is_valid():
            form.save()
            trip = form.cleaned_data['trip']
            activity_name = form.cleaned_data['activity_name']
            date = form.cleaned_data['date']
            time = form.cleaned_data['time']
            location = form.cleaned_data['location']
            activity_description = form.cleaned_data['activity_description']
            item_type = form.cleaned_data['item_type']
            item_number = form.cleaned_data['item_number']
            add_cotraveller = form.cleaned_data['add_cotraveller']

            args = {'form': form, 'trip': trip, 'activity_name': activity_name, 'date': date, 'time': time, 'location': location, 'activity_description': activity_description, 'item_type': item_type, 'item_number': item_number, 'add_cotraveller': add_cotraveller}
            return HttpResponseRedirect(reverse('trips:activity'))
{% extends 'base.html' %}
{% load static %}

{% block title %} Add Activity {% endblock %}

{% block content %}

<div class="container">
    <h2>Add New Activity</h2>
    <form method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Submit</button>
    </form>
</div>

{% endblock %}
以下是我在
addactivityform.html
模板>addactivity文件夹中的代码:

from django.contrib.auth.models import User
from django.db import models
from django.template.defaultfilters import slugify

# Create your models here.
class Trip(models.Model):
    trip_name = models.CharField(max_length=100)
    date = models.DateField()
    planner_name = models.CharField(max_length=100)
    add_coplanner = models.ManyToManyField(User)
    trip_description = models.CharField(max_length=1000, default='null')
    slug = models.SlugField(max_length=150, default='null')

    def __str__(self):
        return self.trip_name

    def save(self, *args, **kwargs):
        self.slug = slugify(self.trip_name)
        super().save(*args, **kwargs)

class Activity(models.Model):
    trip = models.ForeignKey(Trip, on_delete=models.CASCADE)
    activity_name = models.CharField(max_length=100)
    date = models.DateField()
    time = models.TimeField()
    location = models.CharField(max_length=100)
    activity_description = models.CharField(max_length=1000, default='null')
    item_type = models.CharField(max_length=100)
    item_number = models.CharField(max_length=100)
    add_cotraveller = models.ManyToManyField(User)
    slug = models.SlugField(max_length=150, default='null')


    def __str__(self):
        return self.activity_name

    def save(self):
        super(Activity, self).save()
        self.slug = '%i-%s' % (
            self.id, slugify(self.trip.trip_name)
        )
        super(Activity, self).save()
from django.views import generic
from .models import Trip, Activity


class TripListView(generic.ListView):
    template_name = 'trips/triplist.html'
    context_object_name = 'all_trips'

    def get_queryset(self):
        return Trip.objects.all()


class ActivityView(generic.DetailView):
    model = Trip
    template_name = 'trips/activity.html'
from . import views
from django.urls import path

app_name = 'trips'

urlpatterns = [
    path('triplist/', views.TripListView.as_view(), name='triplist'),
    path('triplist/<slug:slug>/', views.ActivityView.as_view(), name='activity'),
]
from django.apps import AppConfig


class TripsConfig(AppConfig):
    name = 'trips'
from django.apps import AppConfig


class AddactivityConfig(AppConfig):
    name = 'addactivity'
from django.forms import ModelForm
from trips.models import Activity

class ActivityForm(ModelForm):
    class Meta:
        model = Activity
        fields = ['trip', 'activity_name', 'date', 'time', 'location', 'activity_description', 'item_type', 'item_number', 'add_cotraveller']
from django.forms import ModelForm
from trips.models import Activity

class ActivityForm(ModelForm):
    class Meta:
        model = Activity
        fields = ['trip', 'activity_name', 'date', 'time', 'location', 'activity_description', 'item_type', 'item_number', 'add_cotraveller']
from . import views
from django.urls import path

app_name = 'addactivity'

urlpatterns = [
    path('addactivity/', views.AddActivityFormView.as_view(), name='addactivity'),
from django.shortcuts import render
from django.views.generic import TemplateView
from .forms import ActivityForm
from trips.models import Activity
from django.http import HttpResponseRedirect
from django.urls import reverse

# Create your views here.


class AddActivityFormView(TemplateView):
    template_name = 'addactivity/addactivityform.html'

    def get(self, request):
        form = ActivityForm()
        activities = Activity.objects.all()
        args = {'form': form, 'activities': activities}
        return render(request, self.template_name, args)

    def post(self, request):
        form = ActivityForm(request.POST)
        if form.is_valid():
            form.save()
            trip = form.cleaned_data['trip']
            activity_name = form.cleaned_data['activity_name']
            date = form.cleaned_data['date']
            time = form.cleaned_data['time']
            location = form.cleaned_data['location']
            activity_description = form.cleaned_data['activity_description']
            item_type = form.cleaned_data['item_type']
            item_number = form.cleaned_data['item_number']
            add_cotraveller = form.cleaned_data['add_cotraveller']

            args = {'form': form, 'trip': trip, 'activity_name': activity_name, 'date': date, 'time': time, 'location': location, 'activity_description': activity_description, 'item_type': item_type, 'item_number': item_number, 'add_cotraveller': add_cotraveller}
            return HttpResponseRedirect(reverse('trips:activity'))
{% extends 'base.html' %}
{% load static %}

{% block title %} Add Activity {% endblock %}

{% block content %}

<div class="container">
    <h2>Add New Activity</h2>
    <form method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Submit</button>
    </form>
</div>

{% endblock %}
我想不出一种方法来重定向到带有slug的网页,其中代码位于
views.py
insideaddactivity文件夹中。作为一个初学者,我无法解决这个问题。所以,我需要帮助

更新:我在问题中的
addactivityform.html
文件夹中添加了代码

我在Stackoverflow也找到了类似的问题和答案。但我还是不能解决这个问题


下面是一个更好的方法。

在活动模型中定义一个get absolute方法,并在视图中调用它

def get_absolute_url(self):
        return reverse("trips:activity", kwargs={"slug": self.slug})
并以以下方式重定向您的视图:

if form.is_valid():
        instance = form.save(commit=False)
        instance.save()
        return HttpResponseRedirect(instance.get_absolute_url())
或者,如果您使用通用的create视图,您可以执行以下操作并给出一个成功的url

class TripCreateView(CreateView):
    model = Trip
    form_class = TripCreateForm
    template_name = 'your_remplate.html'

    def form_valid(self, form):
    ---------
    ---------
    return HttpResponseRedirect(self.get_success_url())

我根本不是django专家,但“提交”按钮似乎将您带到
http://127.0.0.1:8000/addactivity/
,而不是您期望的url。我没有看到该url格式的视图。请编辑问题以包含
addactivity/addactivityform.html
模板。@JohnGordon我已在
addactivityform.html
inside templates>addactivity文件夹中添加了代码。这是否回答了您的问题@是的,我读过。但我不能解决这个问题。如果我在addactivity文件夹下的views.py中使用return
HttpResponseRedirect(reverse('trips:triplist'))
,那么我将不再看到错误消息。但是,如果我使用特定的代码,我会被重定向到错误的页面,这是错误的。我需要被重定向到。我使用了你的代码。但是我得到了这个错误:
找不到页面(404)请求方法:获取请求URL:http://127.0.0.1:8000/triplist/14-singapore/提出人:trips.views.ActivityView未找到与查询匹配的trip
检查它是否实际存在,更好的做法是删除以前的数据并添加新数据,然后再次测试它。我已经这样做了。但我还是犯了同样的错误。我应该通过Google Drive与您共享我的项目文件吗?您的命名让我感到困惑,因为您在视图中使用的是Trip model,所以您必须在Trip models下放置绝对方法。以下是指向我的项目文件的链接: