我的 Django 视图和 URL 不匹配某处给我一个空白屏幕

Posted

技术标签:

【中文标题】我的 Django 视图和 URL 不匹配某处给我一个空白屏幕【英文标题】:My Django views and URLs aren't matching up somewhere giving me a blank screen 【发布时间】:2014-11-14 15:31:59 【问题描述】:

我是 Python 和 Django 的新手,我学习过构建博客的教程,也学习过另一个基于啤酒和啤酒厂构建页面的教程。

在经历这个过程的同时,我开始了自己的项目。第一页列出了一些带有链接的州,该链接转到列出这些州内特定城市的第二页。

我想从那里链接到与该城市相关的第三个站点特定项目。前两页效果很好。但是,当我单击城市名称时,无论我尝试了什么,我都会得到一个空白页。

而且我终其一生都无法弄清楚我哪里出错了。我不认为我完全理解从 views.py 到 urls.py 到 html 的变量流。

也许有人可以给我一些指导,告诉我哪里出错了。再次请耐心等待,因为我对 Django 非常陌生,并且对 python 的掌握非常简单。

class Meta(models.Model):
    rcabbr              = models.CharField(max_length = 15)
    slug                = models.SlugField(unique=False)
    state               = models.ForeignKey('State')
    rc_state            = models.CharField(max_length = 3)
    oerp                = models.CharField(max_length=18)
    subgrp              = models.SlugField()
    sonus_pic           = models.CharField(max_length=8)
    ems                 = models.CharField(max_length=14)
    agc                 = models.CharField(max_length=14)

    def __unicode__(self):
        return self.rcabbr

class State(models.Model):
    name                = models.CharField(max_length=2)
    slug                = models.SlugField(unique=True)
    state_long          = models.CharField(max_length=15)
    owning_site         = models.CharField(max_length=12)

    def __unicode__(self):
        return self.name
        return self.state_long

还有我的观点.py

def StateAll(request):
    statelist = State.objects.all().order_by("name")
    context = 'states':statelist
    return render_to_response('statelist.html',context,        

    context_instance=RequestContext(request))

def RcView(request, rclist): 
    rcs = Meta.objects.filter(rc_state = rclist)
    context = 'rc_list': rcs 
    return render_to_response('rclist.html',context, context_instance=RequestContext(request))

def RateCenterView(request,rcviews): # = rcviews is passed from the URL conf
    rcv = Meta.objects.filter(rcabbr = rcviews)
    context = 'whatrcv': rcv
    return render_to_response('rcview.html',context, context_instance=RequestContext(request))

还有我的 URLS.py

urlpatterns = patterns('',
    url(r'^admin/', include(admin.site.urls)),
    (r'^$', TemplateView.as_view(template_name='index.html')),
    url(r'^meta/$', 'meta.views.StateAll'),
    (r'^meta/(?P<rclist>.*)/$', 'meta.views.RcView'),
    (r'^meta/(?P<rcviews>.*)/$', 'meta.views.RateCenterView'),
)

以及从页面到页面的代码的sn-ps 这列出了州

% for state in states %
    <p><a href="/meta/ state.name /"> state.state_long </a></p>
% endfor %

这需要州并列出城市,还有一些额外的东西只是在试验

 % for rc in rc_list %
     <p><a href="/meta/ rc.slug "> rc </a></p>
     <p>RateCenter Slug:     rc.slug </p>
     <p>RateCenter RC_State:  rc.rc_state </p>
     <p>RateCenter:          rc </p>
 % endfor %

这是损坏的页面

 % for rca in whatrcv %
    <p>RateCenter Slug:      rca.slug </p>
    <p>RateCenter RC_State:  rca.rc_state </p>
    <p>RateCenter:           rca </p>
% endfor %

【问题讨论】:

【参考方案1】:

您的网址中的问题,您的两个网址相同,并且您的 html 网址(href="/meta/city/ rc.slug ) 不以 / 结尾。像这样更改您的网址:

urlpatterns = patterns('',
    url(r'^admin/', include(admin.site.urls)),
    (r'^$', TemplateView.as_view(template_name='index.html')),
    url(r'^meta/$', 'meta.views.StateAll'),
    (r'^meta/(?P<rclist>.*)/$', 'meta.views.RcView'),
    (r'^meta/city/(?P<rcviews>.*)/$', 'meta.views.RateCenterView'),
)

然后像这样更改您的html:

 % for rc in rc_list %
     <p><a href="/meta/city/ rc.slug /"> rc </a></p>
     <p>RateCenter Slug:     rc.slug </p>
     <p>RateCenter RC_State:  rc.rc_state </p>
     <p>RateCenter:          rc </p>
 % endfor %

这对你有用。

【讨论】:

并没有完全解决我的问题,但它让我找到了答案。所以我所做的是,按照您的建议更改了 url 和 html 链接,但这仍然产生了空白。所以后退一步,将“/state/”添加到我的 url 中的 RcView 行和 html 中的链接。然后在我的 RcView html 链接的末尾添加了一个简单的“/”,它运行良好。感谢 Yogesh 引导我朝着正确的方向前进。

以上是关于我的 Django 视图和 URL 不匹配某处给我一个空白屏幕的主要内容,如果未能解决你的问题,请参考以下文章

四十七django路由匹配,分组,反向解析,路由分发,视图层

django中路由系统和视图的对应关系

在 Django 视图中使用 URL?可能的?

Django--路由层视图层模版层

第61篇 Django 路由系统 正则表达式和二级路由 路由的命名和反向解析

django搭建完毕运行显示hello django