2015-02-09 1 views
3

Итак, я сделал одно из многих учебников по блогам, и теперь я работаю над своим собственным приложением. Я бегу против этой ошибки:Попытка отследить NoReverseMatch в новом приложении

Reverse for '' with arguments '()' and keyword arguments '{u'asset_name': u'sfossnse01vmw147'}' not found. 0 pattern(s) tried: [] 

Вот мой модели файла:

from django.db import models 


#Basic tracking information of assets: 
#Host name 
#IP Address 
#CNames assigned in eng.silverspringnet.com 
#eng cluster 
#Description 
#Owner 

# Create your models here. 

class Asset(models.Model): 
    created_by = models.ForeignKey('auth.User') 
    created_date = models.DateTimeField() 
# modified_date = models.DateTimeField() 
    owner = models.CharField(max_length=100) 
    asset_name = models.CharField(max_length=300) 
    fqdn = models.CharField(max_length=300) 
    ip_address = models.GenericIPAddressField() 
    cluster_name = models.CharField(max_length=300) 
    description = models.TextField() 

    def create_asset(self): 
     self.created_date = timezone.now() 
     self.save() 

    def __str__(self): 
     return self.asset_name 

И мои взгляды:

from django.shortcuts import render_to_response 
from django.http import HttpResponse 
from .models import Asset 
from pysphere import VIServer 
from django.shortcuts import render, get_object_or_404 

# Create your views here. 

# Huge performance penalty here 
#def vm_status(vm_name): 
# server = VIServer() 
# server.connect("it-vcenter-01.silverspringnet.com", "[email protected]", "[email protected]@mMn1reug") 
# vm = server.get_vm_by_name(vm_name) 
# vm_stat = vm.get_status(vm) 
# server.disconnect() 
# return vm_stat 

def asset_list(request): 

    assets = Asset.objects.all() 

# for vm in assets: 
#  vm_stat = vm_status(vm.fqdn) 

    return render_to_response('assets/asset_list.html', {'assets': assets}, content_type="text/html") 

def asset_detail(request, asset_name): 
    asset_detail = get_object_or_404(asset, asset_name=asset_name) 
    return render(request, 'assets/asset_detail.html', {'asset_detail': asset_detail}) 

URLs: 

from django.conf.urls import patterns, include, url 
from . import views 

urlpatterns = patterns('', 
    url(r'^$', views.asset_list), 
    url(r'^detail/(?P<asset_name>.*)/$', views.asset_detail), 
) 

Сомнительная шаблон:

<table border="1" style="width:100%"> 
    <tr> 
    <th>Asset Name</th> 
    <th>VM Status</th> 
    <th>FQDN</th> 
    <th>IP Address</th> 
    <th>Owner</th> 
    </tr> 
{% for asset in assets %} 
    <tr> 
     <td><a href="{% url assets.views.asset_detail asset_name=asset.asset_name %}">{{ asset.asset_name }}</a></td> 
     <td>{{ vmstat }}</td> 
     <td>{{ asset.fqdn }}</td> 
     <td>{{ asset.ip_address }}</td> 
     <td>{{ asset.owner }}</td> 
    </tr> 
{% endfor %} 
</table> 

Итак, я пробовал отслеживать i но я, видимо, что-то пропустил здесь. За ошибку я вижу, что имя_файла пытается быть переданным, и в моем urls.py я был довольно открытым с регулярным выражением. (BTW: post_detail.html - это просто HI!, Чтобы попытаться заставить что-нибудь работать). Поэтому сейчас я немного потерялся, и любая помощь будет оценена по достоинству. Я бренд, шлепнувший новинкой в ​​Django, поэтому извиняюсь, если это глупо.

ответ

1

Во-первых, название вашего шаблона URL:

url(r'^detail/(?P<asset_name>.*)/$', views.asset_detail, name="asset_detail"), 

Далее использовать имя в URL-адрес тега. Для Django 1.5 и более поздних версий оберните имя в кавычки.

{% url "asset_detail" asset_name=asset.asset_name %}">{{ asset.asset_name }}</a></td> 
+1

Спасибо! Это сработало отлично. – n1reu