簡體   English   中英

如何在Django上動態更改塊的內容?

[英]How to change the contents of a block dynamically on django?

請參閱下面的固定代碼

我正在使用django 1.8進行第一個網頁項目。 我的網頁有一個部分,該部分由產品菜單和一列組成,該列根據所選菜單項顯示不同的視圖。

最初,我嘗試了一種方法,其中為每個菜單按鈕分配了一個onclick js函數,該函數可更改塊的內容。 我當時在想,然后將每種產品的html代碼寫入單獨的文件中,以供js函數讀取。 我得到它的部分工作,但感覺有點粗略。

我的第二種方法是基於使用django模板的,但是作為一個初學者,我遇到了一些錯誤,我無法弄清楚到底是什么問題。 如果有人可以指出我在做什么錯,或者告訴我什么是動態更改內容的正確方法,我將不勝感激。

我目前遇到的錯誤:

http://127.0.0.1:8000/productmonitor/
NoReverseMatch at /productmonitor/
Reverse for 'product' with arguments '('',)' and keyword arguments '{}' not found. 1 pattern(s) tried: [u'productmonitor/(?P<product_name>[a-z]+)/$']

http://127.0.0.1:8000/productmonitor/
NoReverseMatch at /productmonitor/dualpol/
Reverse for 'product' with arguments '('',)' and keyword arguments '{}' not found. 1 pattern(s) tried: [u'productmonitor/(?P<product_name>[a-z]+)/$']

urls.py

# -*- coding: utf-8 -*-
from django.conf.urls import url

from . import views

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^(?P<product_name>[A-Za-z0-9\-\_]+)/$', views.product, name='product'),
    url(r'^information/$', views.information, name='information'),
    url(r'^casedatabase/$', views.casedatabase, name='casedatabase'),
    url(r'^contact/$', views.contact, name='contact'),
]

views.py

from django.http import HttpResponse
from django.shortcuts import get_object_or_404, render
from django.views import generic
# Create your views here.
from .models import Product

def index(request, product_name='default'):
    #template = 'productmonitor/index.html'
    if product_name == 'dualpol':
        template = 'productmonitor/base_productmonitor_dualpol.html'
    if product_name == 'rhi':
        template = 'productmonitor/base_productmonitor_rhi.html'

    template = 'productmonitor/base_productmonitor.html'
    test_context = {
                    'products' : Product.objects.all(),                   
                    }
    return render(request, template, test_context)

def product(request, product_name='dualpol'):
    if product_name == 'dualpol':
        template = 'productmonitor/base_productmonitor_dualpol.html'
    if product_name == 'rhi':
        template = 'productmonitor/base_productmonitor_rhi.html'

    test_context = {
                    'products' : Product.objects.all(),                   
                    }
    return render(request, template, test_context)

base_productmonitor.html

{% extends "productmonitor/base.html" %}    
{% block content %}
    <div class="productSelectMenu">
        <ul>
            <p>Test</p>
            {% for product in products %}
                <li><a href="{% url 'productmonitor:product' 'dualpol' %}">{{ product.name }}<a/></li>  
            {% endfor %}
        </ul>
    </div>

    {% block productcontent %}
        <div id="productView" class="productView">
            <p>Default productView content</p>    
        </div>
    {% endblock %}
{% endblock %}

base_productmonitor_dualpol.html

{% extends "productmonitor/base_productmonitor.html" %}
{% block productcontent %}
<p>
    dualpol
</p>
{% endblock %}

編輯:固定版本

urls.py

# -*- coding: utf-8 -*-
from django.conf.urls import url

from . import views

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^product/(?P<product_name>[a-z]+)/$', views.product, name='product'),
    url(r'^information/$', views.information, name='information'),
    url(r'^casedatabase/$', views.casedatabase, name='casedatabase'),
    url(r'^contact/$', views.contact, name='contact'),
]

views.py

enter code here
from django.http import HttpResponse
from django.shortcuts import get_object_or_404, render, redirect
from django.views import generic
# Create your views here.
from .models import Product

def index(request, product_name=''):
    return redirect('productmonitor:product', product_name='dualpol')

def product(request, product_name):
    if product_name == 'dualpol':
        template = 'productmonitor/base_productmonitor_dualpol.html'
    if product_name == 'rhi':
        template = 'productmonitor/base_productmonitor_rhi.html'

    test_context = {
                    'products' : Product.objects.all(),                   
                    }
    return render(request, template, test_context)

def information(request):
    template = 'productmonitor/base_information.html'
    context = {}
    return render(request, template, context)

def casedatabase(request):
    template = 'productmonitor/base_case-database.html'
    context = {}
    return render(request, template, context)

def contact(request):
    template = 'productmonitor/base_contact.html'
    context = {}
    return render(request, template, context)

base_productmonitor.html

{% extends "productmonitor/base.html" %}

{% block content %}
    <div class="productSelectMenu">
        <ul>
            <li><a href="{% url 'productmonitor:product' 'dualpol' %}">Dual pol<a/></li>
            <li><a href="{% url 'productmonitor:product' 'rhi' %}">Rhi<a/></li>
        </ul>
    </div>

    {% block productcontent %}
        <div id="productView" class="productView">
            <p>Default productView content</p>    
        </div>
    {% endblock %}
{% endblock %}

base_productmonitor_dualpol.html

{% extends "productmonitor/base_productmonitor.html" %}
{% block productcontent %}
<div id="productView" class="productView">
    <p>
        dualpol
    </p>
</div>
{% endblock %}

我認為錯誤是指產品功能中的渲染未獲得正確的<product_name>使用。 它表明它具有的參數(正在嘗試的<product_name> )不存在。 因此,在產品功能中要做的就是嘗試確保您確實得到了<product_name>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM