看起来url与django不匹配

时间:2016-03-18 13:42:40

标签: python django

我已经尝试了几个选项并提供帮助,但网址不匹配。这是我的代码

index.py中,我只选择一个随机的节目在我的主页上显示

def index(request):
    rand = random.randint(1, len(Verse.objects.all()))
    context = {
        'verse': Verse.objects.get(id = rand)
    }
    return render (request, 'verse/index.html', context)

views.py

def study(request, ref):
    context = {
        'verse': Verse.objects.get(reference = ref)
    }
    return render (request, 'verse/study.html', context)

reference是我的Verse模型的字段之一。目的是使用ref中的urls.py参数,以便只需将该诗句附加到链接的末尾即可生成不同的页面

urls.py

url(
    regex=r'^study/(?P<ref>)/$',
    view = study,
    name = 'study'
),

在我的index.html

<a href="{% url 'bible:study' ref %}"> Study</a>

我尝试在链接上突出显示,但这是它生成的内容

localhost:8000/bible/study//

而不是例如:

localhost:8000/bible/study/genesis/

2 个答案:

答案 0 :(得分:2)

您没有将ref参数传递给template,因此显示为空。根据django文档,默认情况下,未定义的变量被视为空字符串。阅读this

将您的index视图修改为

def index(request):
    rand = random.randint(1, len(Verse.objects.all()))
    verse = Verse.objects.get(id = rand)
    context = {
        'verse': verse,
        'ref': verse.reference
    }
    return render (request, 'verse/index.html', context)

答案 1 :(得分:-1)

context = {
        'verse': Verse.objects.get(reference = ref)
    }

在这个'verse'中是html模板的变量名,Verse.objects.get(reference = ref)是Django在网页渲染过程中替换html中'verse'变量的值。

它显示localhost:8000/bible/study//,因为您未在上下文中为'ref'变量定义任何值。

将html中的'ref'替换为'verse':

<a href="`{% url 'bible:study' verse %}`"> Study</a>
相关问题