2017-09-04 121 views
2

我试图用动态url打开海报里面的内容,但我面临问题 我的代码是包含一些电影海报的简单网页,当我点击海报时,新页面中的新模板应该打开哪显示这张海报的信息。Django动态网址

但每当我在海报相同的模板(的index.html)点击在新页面,而不是打开page.html中

127.0.0.1:8000/home是网页所有的海报,我点击poster1与id = 1然后在新的页面127.0.0.1/home/1将打开,但它仍然是index.html与所有海报不page.html其中poster1 id = 1的内容是存储。

这里是我的代码

主页/ models.py

from django.db import models 

class Poster(models.Model): 
    poster_name = models.CharField(max_length=20) 
    poster_img = models.FileField(upload_to="poster_image/") 

    def __str__(self): 
     return self.poster_name 


class Poster_page(models.Model): 
    poster = models.ForeignKey(Poster, default= 1) 
    poster_name = models.CharField(max_length=20) 
    poster_img = models.FileField() 
    poster_details = models.TextField() 

主页/ views.py

from django.shortcuts import render_to_response 
from .models import Poster, Poster_page 

def poster(request): 
    pos = Poster.objects.all() 
    return render_to_response('index.html', {'pos':pos}) 

def poster_page(request, id=1): 
    poster_pg = Poster_page.objects.all() 
    return render_to_response('page.html', {'poster_pg':poster_pg}) 

homepage.url

from django.conf.urls import url 
from.views import poster, poster_page 


urlpatterns = [ 
    url(r'^',poster), 
    url(r'^home/(?P<id>/d+)/$', poster_page), 

]

poster.url

from django.conf.urls import url, include 
from django.contrib import admin 
from django.conf import settings 
from django.conf.urls.static import static 

urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url(r'^home/',include('homepage.urls', namespace='home')) 
] 


if settings.DEBUG: 
    urlpatterns += static(settings.STATIC_URL, 
    document_root=settings.STATIC_ROOT) 
    urlpatterns += static(settings.MEDIA_URL, 
    document_root=settings.MEDIA_ROOT) 

的index.html

<body> 
<div class="row"> 
    {% for poster in pos %} 
    <div class="col-md-4"> 

      <a href="{{poster.id}}" target="new"><img src="{{ poster.poster_img.url }}" alt="image"><h3>{{ poster.poster_name }}</h3></a> 
    </div> 
    {% endfor %} 
</div> 

page.html中

<body> 
<div class="row"> 
    <img src="{{ poster_img.url }}" alt="image"><h2>{{ poster_name }}</h2> 
</div> 
<div class="row"> 
    <h2>{{ poster_details }}</h2>  
</div> 

回答

1

homepage.url

更换d/+通过\d+

from django.conf.urls import url 
from . import views 

urlpatterns = [ 
    url(r'^$',views.poster), 
    url(r'^(?P<id>\d+)/$', views.poster_page), 
] 

然后尝试:

from django.shortcuts import render,get_object_or_404 

def poster_page(request, id): 
    poster_pg = get_object_or_404(Poster_page, id=id) 
    return render_to_response('page.html', {'poster_pg':poster_pg}) 

是的,你还需要<a href="/home/{{poster.id}}/">

+0

不工作,127.0.0.1:8000/home/home/1在新标签中打开 –

+0

现在只需检查它。 –

+0

@VikasGautam,它工作过吗? –

0

在index.html中,您尚未在href中定义正确的URL以打开海报详细信息。

正确的语法会是这样的:

<a href="home/{{poster.id}}" target="new"><img src="{{ poster.poster_img.url }}" alt="image"><h3>{{ poster.poster_name }}</h3></a> 
+0

它不工作,当我试图在新页面中打开127.0.0.1:8000/home/home/1地址时 –

0

我认为这个问题是在上下文的变量视图 -

return render_to_response('index.html', {'pos':pos}) 

应该是 -

return render_to_response('index.html', {'poster':pos}) 

因为在您在索引模板中调用{{poster.id}}