Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django dynamic url

I trying to open content inside poster using a dynamic url, but I am facing a problem my code is for a simple web page containing some movie posters and when I click on a poster new template on a new page should open which will show information about this poster.

but whenever I click on a poster same template(index.html) opens in a new page instead of page.html

eg

127.0.0.1:8000/home is web page with all posters and I clicked on poster1 with id=1 then in new page 127.0.0.1/home/1 will open but it is still index.html with all posters, not page.html in which content of poster1 id=1 is stored.

Here is my code

homepage/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()

homepage/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>
like image 288
Vikas Gautam Avatar asked Oct 28 '25 04:10

Vikas Gautam


1 Answers

homepage.url

Replace d/+ by \d+

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

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

Then Try:

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})

and yes you also need <a href="/home/{{poster.id}}/">.

like image 63
Astik Anand Avatar answered Oct 29 '25 18:10

Astik Anand



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!