Python Django:在提交表单时获取NoReverseMatch,URL有Slug
我通过构建一个名为TravelBuddies的应用程序来学习Django。它将允许旅行者计划他们的旅行,保存相关的旅行项目(如预订、机票、护照副本、保险信息等),并为日常活动创建警报。该应用程序还能够向旅行者更新当地信息,如天气或每日新闻。旅行者还可以与他人共享旅行信息,或与他人合作计划旅行 我面临一个问题。我有一张这样的表格: 当我点击提交按钮时,我应该被重定向到。相反,我得到了以下错误:Python Django:在提交表单时获取NoReverseMatch,URL有Slug,python,django,Python,Django,我通过构建一个名为TravelBuddies的应用程序来学习Django。它将允许旅行者计划他们的旅行,保存相关的旅行项目(如预订、机票、护照副本、保险信息等),并为日常活动创建警报。该应用程序还能够向旅行者更新当地信息,如天气或每日新闻。旅行者还可以与他人共享旅行信息,或与他人合作计划旅行 我面临一个问题。我有一张这样的表格: 当我点击提交按钮时,我应该被重定向到。相反,我得到了以下错误: NoReverseMatch at /addactivity/ Reverse for 'activi
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中使用returnHttpResponseRedirect(reverse('trips:triplist'))
,那么我将不再看到错误消息。但是,如果我使用特定的代码,我会被重定向到错误的页面,这是错误的。我需要被重定向到。我使用了你的代码。但是我得到了这个错误:找不到页面(404)请求方法:获取请求URL:http://127.0.0.1:8000/triplist/14-singapore/提出人:trips.views.ActivityView未找到与查询匹配的trip
检查它是否实际存在,更好的做法是删除以前的数据并添加新数据,然后再次测试它。我已经这样做了。但我还是犯了同样的错误。我应该通过Google Drive与您共享我的项目文件吗?您的命名让我感到困惑,因为您在视图中使用的是Trip model,所以您必须在Trip models下放置绝对方法。以下是指向我的项目文件的链接: