反向视图失败,因为参数是 None

reverse for view fails because argument is None

在tables.py中,我导入了django-tables2

class CarownerTable(tables.Table):
    ...
    Car_registration=tables.LinkColumn('register_docs', args =[A('register__id')], text='View Register', orderable=False)

我的 urls.py 看起来像这样,

url(r'^register_docs/$', views.register_docs, name='register_docs' ),
url(r'^register_docs/(?P<docid>(\d)+)$', views.register_docs, name='register_docs' ),

和视图

def register_docs(request, docid=None):
    #This view allows for the display of the pdf file
    if docid is None:
        #this line here loads a default image
        doclink = '........./Car/Misc/noImageOnFile.pdf'
        return HttpResponse(doclink, content_type="application/pdf")
    else:
        register_doc_path = Register.objects.get(pk=docid).register_File_Path

        register_doc_data = open(register_doc_path, "rb").read()
        t = loader.get_template('carmanager/display_docs.html')
        variables = RequestContext(request, {'file':register_doc_data})
        output = t.render(variables)
        return HttpResponse(register_doc_data, content_type="application/pdf")

问题是当我加载结果时,某些对象没有附加文档。导致这个

Reverse for 'register_docs' with arguments '(None,)' and keyword arguments '{}' not found. 2 pattern(s) tried: ['carmanager/register_docs/(?P<docid>(\d)+)$', 'carmanager/register_docs$'] 

我尝试创建了两个 url 一个接受参数,一个不接受参数,但它仍然不允许 table 加载那些没有参数的人。即使无法加载汽车登记文件,我也希望两者都加载。

因此,如果您的某些记录缺少 ags 值,则解决方案是不使用 link列。

如果您需要在 django-tables2 中显示信息,其中某个列可能包含或可能不包含 url link 所需的信息,请使用

templateColumn

例如

templateRegister = tables.TemplateColumn(template_name="carmanager/registertemplate.html")

registertemplate.html 应该是这样的

<a  {% if record.register__id %} target="_Blank" href="/carmanager/register_docs/{{record.register__id}}"> View Register {%else%} > No register {%endif%}</a>