view.py 中的问题:消息错误 Invalid literal for int() with base 10

Issue in view.py : message error Invalid literal for int() with base 10

我为我的 Django 应用程序创建了以下结构:

../programs/  #home page for the app 
../program/id #detailed page about a specific program stored in the db

但是,当我尝试从浏览器访问 ../programs/1(1 是我想查看详细信息的程序的 ID)时,出现以下错误:

ValueError at /programs/1/
invalid literal for int() with base 10: '1/'
Request Method: GET
Request URL:    http://127.0.0.1:8000/programs/1/
Django Version: 1.10.7
Exception Type: ValueError
Exception Value:    
invalid literal for int() with base 10: '1/'

这是我的代码:

views.py

from django.http import Http404
from django.shortcuts import render
from .models import Step, Cycle, Program, MotorSetting, GeneralSetting
from django.core.exceptions import ObjectDoesNotExist

def index(request):
   all_programs = Program.objects.all()
   context = {
       'all_programs': all_programs
   }
   return render(request, 'programs/index.html', context)


def program(request, program_id):
    try:
        program = Program.objects.filter(id=program_id).get()
        return render(request, 'programs/program.html', {'program': 
        program})
    except ObjectDoesNotExist:
        raise Http404("A program with this ID does not exist yet.")

program.html

{{ program }}

programs.urls.py

from django.conf.urls import url
from . import views

urlpatterns = [
    #frontend homepage
    url(r'^$', views.index, name='index'),

    #single program page
    url(r'^(?P<program_id>[0-9]+/)$', views.program, name='program'),
]

models.py

from django.db import models
from django.core.validators import MaxValueValidator, MinValueValidator

class Program(models.Model):
    program_name = models.CharField(max_length=50)
    program_description = models.CharField(max_length=250)
    cycles = models.ManyToManyField(Cycle)

    def __str__(self):
        return self.program_name

我似乎无法发现错误,希望有人能提供帮助。提前致谢!

更改 url 正则表达式中 '/' 的位置,

改变

url(r'^(?P<program_id>[0-9]+/)$', views.program, name='program'),

到,

url(r'^(?P<program_id>[0-9]+)/$', views.program, name='program'),

urls.py 中的模式 url(r'^(?P<program_id>[0-9]+/)$', views.program, name='program'), 捕获了 program_id 组中的 /。像这样将其移出组:

from django.conf.urls import url
from . import views

urlpatterns = [
    #frontend homepage
    url(r'^$', views.index, name='index'),

    #single program page
    url(r'^(?P<program_id>[0-9]+)/$', views.program, name='program'),
                                 ^ here
]