it-swarm.dev

Django '/' URL'sinde görünen statik index.html

Ben index.html içinde/statik/klasör var. Django uygulamam denediğimde çalışıyor:

http://127.0.0.1:8000/index.html

Ancak index.html'e url ile ulaşmak istiyorum:

http://127.0.0.1:8000/

Bir manzara yazdım ve işe yarıyor:

class IndexView(TemplateView):
    template_name = 'index.html'

Ayrıca urls.py dosyasına ekledim (bu, http://127.0.0.1:8000/css/style.css gibi statik olarak çalışmama izin verir):

url(r'^(?P<path>.*)$', 'Django.contrib.staticfiles.views.serve', {
            'document_root': settings.STATIC_ROOT, 'show_indexes':True
        }),

Ancak TemplateView olmadan istediğimi yapmanın bir yolu olduğunu düşünüyorum.

Herhangi bir öneri? Teşekkürler. Django versiyonum: Django 1.5 

D&UUML;ZENLE:

İndex.html'i statik hale getirme sebebi: Phonegap uyumlu Django uygulaması yapmak istiyorum, bu yüzden uygun kodlamadan sonra tek yapmam gereken -> make .Zip'i statik klasöründen ve Phonegap'a mobil olarak yüklemek Uygulamanın. Kolay ve temiz.

35
Feanor

Bunun gibi bir geliştirme için static/index.html hizmetini verebilirsiniz:

if settings.DEBUG:
    urlpatterns += url(
        r'^$', 'Django.contrib.staticfiles.views.serve', kwargs={
            'path': 'index.html', 'document_root': settings.STATIC_ROOT}),

Ancak üretim için nginx (veya diğer ön uç sunucunuzu) index.html konumu için / dosyasını sunacak şekilde yapılandırmanız gerekir.

G&UUML;NCELLEME

Böyle yapman gereken vakayı açıklamak istiyorum. Örneğin, Django uygulamanız yalnızca yönetici ve api görünümündedir, ancak müşteri tek bir sayfa uygulamasıyla etkileşime girer (Ember, Angular, neyse). Yani projeniz en az iki alt projeye sahip, biri ana Django uygulamanızla, ikincisi ise tüm html/js/css öğelerinin yer aldığı bir istemci uygulaması. Müşteri komut dosyalarının Django arka ucundan ayrı olması çok uygundur, ön uç geliştiricilerinizin işlerini yapmasını ve Django'nun varlığından kaçınmasını sağlar (bir gün farklı depoya taşınabilir).

Bu durumda, aşağıdaki derleme iş akışını elde edersiniz:

  1. Komut dosyalarınızı/stillerinizi/şablonlarınızı yeniden oluşturmak için istemci uygulaması kaynakları izleyicisini çalıştırın (brunch watch, grunt job veya gulp watch görevi)
  2. Üretim için Django ile statik toplama
  3. Urlpatterns gelişimleri için düzeltme ve üretim için doğru nginx config olduğundan emin olun

İşte benim urls.py örneği

urlpatterns += patterns(
    'Django.contrib.staticfiles.views',
    url(r'^(?:index.html)?$', 'serve', kwargs={'path': 'index.html'}),
    url(r'^(?P<path>(?:js|css|img)/.*)$', 'serve'),
)
45
Anton Egorov

Bu durumda TemplateView alt sınıfına ihtiyacınız yoktur. TemplateView öğesini doğrudan URL dizininizde, index.html şablonlar dizininizdeyken kullanabilirsiniz.

from Django.views.generic.base import TemplateView

urlpatterns = [
    url(r'^$', TemplateView.as_view(template_name='index.html'), name="home"),
]
37
Alasdair

templates dizini oluşturabilir, html dosyasını oraya koyabilir ve daha sonra views.py dosyasında işleyebilirsiniz.

    def index(request):
        return render(request, 'my_app/index.html', context={})

templates.py içinde templates_dir ayarını yapmayı unutmayın

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
TEMPLATES_DIR = os.path.join(BASE_DIR, "templates")

TEMPLATES = [
{
    'BACKEND': 'Django.template.backends.Django.DjangoTemplates',
    'DIRS': [TEMPLATES_DIR,],
    'APP_DIRS': True,
    ...
0
Michael Obichkin

Statik HTML dosyanızı, şablonlanmış bir HTML dosyasında tanımlanan bir iframe içine sarın. Bazı stiller ile tweaks iframe% 100 genişlik ve yükseklik yapabilir.

{% load static %}
<html>
    <head>
        <title>Templated HTML</title>

        <style>
            html, body {
                width: 100%;
                width: 100%;
                margin: 0;
                padding: 0;
                border-width: 0;
            }

            iframe {
                position: absolute;
                top: 0;
                left: 0;
                width: 100vw;
                height: 100vh;
                margin: 0;
                padding: 0;
                border-width: 0;
            }
        </style>
    </head>
    <body>
        {{ content }}
        <iframe src="{% static 'main/html/test.html' %}"></iframe>
    </body>
</html>
0
Geordie

Bu cevap (veya blog yazısı ) 'da / üzerine index.html' nin nasıl sunulacağı konusundaki uzun açıklamama göz atın. Bununla birlikte, bu çözüm tek başına yeterli olmayabilir, ancak Django tarafından sunulan tam teşekküllü bir SPA yaptırmak istiyorsanız (ön uç yönlendirmeye ihtiyacınız olduğundan).

/static/'dan /'a yönlendirme, tüm istekleri ön tarafa iletme, index.html dosyalarını bulmak için farklı yöntemlerle oynuyorum. Sonunda, tüm bunları çözmek için en iyi yöntemi buldum urls.py değil, Django-spa (README'deki kurulum talimatları) olarak yayınladığım WhiteNoise'in bir uzantısı olarak ).

İlgili tartışmaların bir kısmını bu WhiteNoise issue içinde bulabilirsiniz.

0
metakermit