0

私はWindowsVista上のPython2.7を使用してDjango1.4.3でプログラミングしており、製品を提供するWebサイトを作成しています。/productosそのため、サブページにさまざまな製品がリストされています。今、私は/producto/#リストされた製品でページを表示するページを表示しようとしています。これが私urls.pyのページのインデックスのように機能する私のです。

from django.conf.urls.defaults import patterns, url

urlpatterns = patterns('demo.apps.home.views',
        url(r'^$','index_view', name = 'vista_principal'),
        url(r'^about/$','about_view', name = 'vista_about'),
        url(r'^productos/$','productos_view', name = 'vista_productos'),
        url(r'^producto/(?P<id_prod>.*)/$', 'singleProduct_view', 
            name = 'vista_single_producto'),
        url(r'^contacto/$','contacto_view', name = 'vista_contacto'),
        url(r'^login/$', 'login_view', name = 'vista_login'),
        url(r'^logout/$', 'logout_view', name = 'vista_logout'),
)

また、その製品を取得してWebサイトにフィードするsingleProduct_view機能もあります。views.py

def singleProduct_view(request, id_prod):
        prod = producto.objects.get(id = id_prod)
        ctx = {'producto':prod}
        return render_to_reponse('home/SingleProducto.html', ctx, 
                                  context_instance = RequestContext(request))

ただし、/producto/2', it gave meproductoマッチングクエリを入力すると、「存在しない」というエラーが発生します。問題であると想定されるのは?

4

2 に答える 2

0

productoページのURLを次のように変更することをお勧めします

url(r'^producto/(?P<id_prod>\d+)/$', 'singleProduct_view', 
        name = 'vista_single_producto')

正規表現。*が文字列と一致していた可能性があるため、singleProduct_view内のid_prodは実際には数字ではなく文字列でした

** 編集 **

次に、ビュー内でid_prodを整数に変換する必要があります

def singleProduct_view(request, id_prod):
        prod = producto.objects.get(id = int(id_prod))
        ctx = {'producto':prod}
        return render_to_reponse('home/SingleProducto.html', ctx, 
                                  context_instance = RequestContext(request))

get_object_or_404を利用して、オブジェクトがデータベースにも存在することを確認することもできます。それはあなたの見方を変えるでしょう

from django.shortcuts import render, get_object_or_404

def singleProduct_view(request, id_prod):
        prod = get_object_or_404( producto, id = int(id_prod) )
        ctx = {'producto':prod}
        return render_to_reponse('home/SingleProducto.html', ctx, 
                                  context_instance = RequestContext(request))
于 2013-03-21T02:29:22.873 に答える
0

問題は、Unicode 文字列を使用して Integerfield をクエリしているという事実である可能性がありますが、提案されているように URL を変更しても、エラーを取り除くのに役立たない場合があります。引数を文字列として取得するためです。

ただし、引数 id_prod を int に変換し、データベースに id = 2 のエンティティがあることを確認する必要があります。

于 2013-03-21T03:16:43.263 に答える