python - Django: link to url in template when function is in a view in another directory? -


i'm trying display comments in template this:

{{ url note.note }}  {{ url note.note_by }} 

my problem template in directory view "requests" notes are. how link view in directory (or more specifically; note.note inside function in views.py in directory)?

in views.py in same directory template, linking template this:

def blah(request):    return render(request, 'site/blah.html') 

and in views.py request , save comments (note.note) this:

def messages(request): if request.method == "post":     new_note_text = request.post.get('new_note')     new_note = note()     new_note.note = new_note_text       new_note.note_by = request.user      new_note.note_datetime = timezone.now()     new_note.save()  return render(request, 'theme/messages.html', context) 

edit:

urls.py in same directory template:

from django.conf.urls import include, patterns, url site import views   urlpatterns = patterns('',  url(r'^test$', views.blah, name='blah'), ) 

settings.py:

import os  base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))  secret_key = ''  # security warning: don't run debug turned on in production! debug = true  allowed_hosts = []   # application definition  installed_apps = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'app',  'theme',  'site',  )   middleware_classes = ( 'django.contrib.sessions.middleware.sessionmiddleware', 'django.middleware.common.commonmiddleware', 'django.middleware.csrf.csrfviewmiddleware', 'django.contrib.auth.middleware.authenticationmiddleware', 'django.contrib.auth.middleware.sessionauthenticationmiddleware', 'django.contrib.messages.middleware.messagemiddleware', 'django.middleware.clickjacking.xframeoptionsmiddleware', 'django.middleware.security.securitymiddleware',  )  root_urlconf = 'app.urls'  templates = [ {     'backend': 'django.template.backends.django.djangotemplates',     'dirs': [],     'app_dirs': true,     'options': {         'context_processors': [             'django.template.context_processors.debug',             'django.template.context_processors.request',             'django.contrib.auth.context_processors.auth',             'django.contrib.messages.context_processors.messages',         ],        },     },  ]    wsgi_application = 'appen.wsgi.application'    databases = { 'default': {     'engine': 'django.db.backends.sqlite3',     'name': os.path.join(base_dir, 'db.sqlite3'), } }    language_code = 'en-us'    time_zone = 'europe'    use_i18n = true    use_l10n = true    use_tz = true     static_url = '/static/' 

django's reverse url resolver has 1 job. takes arguments fed it(either through {% url ... %}" template tag or urlresolves.reverse in python code.

as long code in valid django configuration(below) @ start time directories templates , views in isn't relevant. particular example assumes you've included apps in settings.py configuration , root urls.py includes entries delegate urls.py files in individual apps main , notes

- templates      |      - main.html      - notes.html - main      |      - views.py      - models.py      - urls.py - notes      |      - views.py      - models.py       - urls.py - urls.py - settings.py 

what need work

so first lets @ main have create view function in views.py

from django.shortcuts import render  def main(request):     return render(request, 'main.html', {}) 

and urls.py entry in main/urls.py

from django.conf.urls import url  . import views  urlpatterns = [     url(r'^$', main, name='main'), ] 

so main view. lets assume want include <ul> links various notes other app. first things first need create note/<note_id> view. using <note_id> parameter address note entries.

in notes/views.py create notes function takes note_id keyword argument.

def notes(note_id=none):     #... note database , put in context     return render(request, 'notes.html', {}) 

then create notes/urls.py entry view we've created.

from django.conf.urls import url, patterns urlpatterns = patterns(     'main.views',     url(r'^(?p<note_id>[0-9]+)/?$','notes', name='notes'), ) 

we need pull using root urls.py file

from django.conf.urls import include, url  urlpatterns = [     url(r'^main/', include('main.urls')),     url(r'^notes/', include('notes.urls')), ] 

so lets stop. have right now? have view called main binds context main.html template , returns response markup. have urls.py entry tells web server how reach view. have exact same thing view called notes in different app. finally, have root urls.py pull app-specific urls.py files top-level.

what want do? want include in main.html <ul> filled valid url references our notes.

since have setup easy use {% url ... %} template tag appropriate information resolve entries our urls.py files.

in our main.html template add this...

<ul>     <li> <a href="{% url "notes" note_id=1 %}">note 1</a></li>     <li> <a href="{% url "notes" note_id=2 %}">note 2</a></li>     <li> <a href="{% url "notes" note_id=3 %}">note 3</a></li> </ul> 

and when main.html invoked markup above like...

<ul>     <li> <a href="/notes/1">note 1</a></li>     <li> <a href="/notes/2">note 2</a></li>     <li> <a href="/notes/3">note 3</a></li> </ul> 

the important thing remember here url , urlresolver.reverse do. take view name , arguments , convert them valid url string. dry approach url management because later if change notes notes_important or of templates automatically fix you.


Comments

Popular posts from this blog

angularjs - ADAL JS Angular- WebAPI add a new role claim to the token -

php - CakePHP HttpSockets send array of paramms -

node.js - Using Node without global install -