ホーム>source

テンプレートをレンダリングしようとしたときに、No Reverse Matchエラーが発生しました。このリバースマッチエラーがないことの意味を理解しやすくし、エラーを解決する方法を説明できますか?

models.py

<前>ウィズウィズ

urls.py:

<前>ウィズウィズ

views.py:

<前>ウィズウィズ

html:

<前>ウィズウィズ from django.contrib.sites.models import Site from django.contrib.gis.db import models from django.utils.crypto import get_random_string from django.contrib.gis.geos import GEOSGeometry,Point from django.contrib.auth.models import AbstractUser from django.shortcuts import render # Create your models here. class User(AbstractUser): pass geos_pnt=Point(4314498.56, 1003834.600,srid=3857) #pnt=GEOSGeometry('POINT(4314498.56, 1003834.600)').wkt class Apartment(models.Model): SUBCITY_CHOICES = ( ('ADK', 'Addis Ketema'), ('AKLTY', 'Akaki-Kality'), ('ARD', 'Arada'), ('BL', 'Bole'), ('GL', 'Gulele'), ('KLF', 'Kolfe-Keranio'), ('LDTA', 'Ledeta'), ('NFS', 'Nefas Silk'), ('YK', 'Yeka')) apt_id = models.CharField(str(SUBCITY_CHOICES)+"-"+get_random_string(length=4), max_length=8,primary_key=True) location = models.PointField(default=geos_pnt,extent=(4282586.10,996190.90,4346411.02,1011478.31), blank=True, null=True, srid=3857, help_text="Point(longitude latitude)") no_bedrooms= models.IntegerField(null=True) apt_area = models.IntegerField(default=0, null=True) apt_cost = models.IntegerField(default=0, null=True) apt_subcity = models.CharField(default='Nefas Silk',max_length=100, choices=SUBCITY_CHOICES,null=True) register_date = models.DateTimeField('Register Date',auto_now_add=True,null=True) slug = models.SlugField(unique=True) objects = models.Manager() sites =models.ManyToManyField(Site) #change points from apt_rent_db to kml def pointkml(self): points = Apartment.objects.kml() return render("placemarks.kml", {'places': points}) def get_absolute_url(self): return reverse('apartment_create', kwargs={'pk': self.pk, 'apt_id': self.apt_id.pk}) def save(self, *args, **kwargs): #self.Latitude = self..y #self.Longitude = self.location.x self.slug = slugify(self.apt_id) super(Apartment, self).save(*args, **kwargs) class Meta: # order of drop-down list items verbose_name = ("Apartment") verbose_name_plural = ("Apartments") ordering = ('apt_cost',) app_label = 'rent_app' def __unicode__(self): return self.apt_id
あなたの答え
  • 解決した方法 # 1

    あなたのコードには多くの問題があると思います。

    まず、表示されているエラーについてです。あなたのURLでは、パラメータとしてスラッグを期待する「apartment_create」という名前のパターンを定義しました。ただし、 apt_id  テンプレートには空のフィールドがあります。したがって、djangoは「apartment_create」という名前のパターンと有効なスラッグを見つけることができません。これを解決するには、URLパターンを次のように変更します

    <前>ウィズウィズ

    テンプレートで path('apartment_create/', views.ApartmentCreate.as_view(), name='apartment_create') を取り出します  フォームのアクションから(または apt_id を取り出して)  すべて一緒に。

    ただし、あなたの action   ApartmenCreate がない  パラメータ。さらに、 model  と fields  パラメータは冗長です。そして、あなたは本当に form  そのビューのパラメータは正しいですか?

    モデルのフィールド template_name  奇妙に見えます。非常にあいまいな apt_id のフィールドを作成しています 。選択肢フィールドが必要な場合は、フィールドの選択肢パラメータを設定する必要があります。例:

    <前>ウィズウィズ

    あなたの verbose_name  も正しくありません:まず、そのパターンに一致する有効なURLがありません。次にフィールド( apt_id = models.CharField(choices=SUBCITY_CHOICES, max_length=8, primary_key=True) )にはpkがありません。

    テンプレートに get_absolute_url のようなステートメントがあります 。ただし、 apt_id  クラスです。だからあなたの意見では {{ Apartment.apt_id }}  だから Apartment のようにテンプレートの値にアクセスできます 。

    私が見落としている他の問題がおそらくあるでしょう。

    add context_object_name='apartment'

関連記事

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ c - hiredisでMGETを使用できますか?